Visible to Intel only — GUID: GUID-C9B0D621-4B96-4F76-8E18-766887B6D84D
Visible to Intel only — GUID: GUID-C9B0D621-4B96-4F76-8E18-766887B6D84D
Threadpool interoperability API
Overview
API extensions to interact with the underlying Threadpool run-time. More…
// namespaces
namespace dnnl::threadpool_interop;
// global functions
dnnl_status_t DNNL_API dnnl_threadpool_interop_stream_create(
dnnl_stream_t* stream,
dnnl_engine_t engine,
void* threadpool
);
dnnl_status_t DNNL_API dnnl_threadpool_interop_stream_get_threadpool(
dnnl_stream_t astream,
void** threadpool
);
dnnl_status_t DNNL_API dnnl_threadpool_interop_set_max_concurrency(int max_concurrency);
dnnl_status_t DNNL_API dnnl_threadpool_interop_get_max_concurrency(int* max_concurrency);
dnnl_status_t DNNL_API dnnl_threadpool_interop_sgemm(
char transa,
char transb,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const float* A,
dnnl_dim_t lda,
const float* B,
dnnl_dim_t ldb,
float beta,
float* C,
dnnl_dim_t ldc,
void* threadpool
);
dnnl_status_t DNNL_API dnnl_threadpool_interop_gemm_u8s8s32(
char transa,
char transb,
char offsetc,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const uint8_t* A,
dnnl_dim_t lda,
uint8_t ao,
const int8_t* B,
dnnl_dim_t ldb,
int8_t bo,
float beta,
int32_t* C,
dnnl_dim_t ldc,
const int32_t* co,
void* threadpool
);
dnnl_status_t DNNL_API dnnl_threadpool_interop_gemm_s8s8s32(
char transa,
char transb,
char offsetc,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const int8_t* A,
dnnl_dim_t lda,
int8_t ao,
const int8_t* B,
dnnl_dim_t ldb,
int8_t bo,
float beta,
int32_t* C,
dnnl_dim_t ldc,
const int32_t* co,
void* threadpool
);
Detailed Documentation
API extensions to interact with the underlying Threadpool run-time.
Global Functions
dnnl_status_t DNNL_API dnnl_threadpool_interop_stream_create(
dnnl_stream_t* stream,
dnnl_engine_t engine,
void* threadpool
)
Creates an execution stream with specified threadpool.
Parameters:
stream |
Output execution stream. |
engine |
Engine to create the execution stream on. |
threadpool |
Pointer to an instance of a C++ class that implements dnnl::threapdool_iface interface. |
Returns:
dnnl_success on success and a status describing the error otherwise.
See also:
Using oneDNN with Threadpool-Based Threading
dnnl_status_t DNNL_API dnnl_threadpool_interop_stream_get_threadpool(
dnnl_stream_t astream,
void** threadpool
)
Returns a threadpool to be used by the execution stream.
Parameters:
astream |
Execution stream. |
threadpool |
Output pointer to an instance of a C++ class that implements dnnl::threapdool_iface interface. Set to NULL if the stream was created without threadpool. |
Returns:
dnnl_success on success and a status describing the error otherwise.
See also:
Using oneDNN with Threadpool-Based Threading
dnnl_status_t DNNL_API dnnl_threadpool_interop_set_max_concurrency(int max_concurrency)
Sets the maximum concurrency assumed by oneDNN when outside a parallel call.
Parameters:
max_concurrency |
The maximum concurrency assumed by oneDNN when outside a parallel call. This is a threadlocal setting. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_threadpool_interop_get_max_concurrency(int* max_concurrency)
Gets the maximum concurrency assumed by oneDNN when outside a parallel call.
Parameters:
max_concurrency |
The maximum concurrency assumed by oneDNN when outside a parallel call. This is a threadlocal setting. |
Returns:
dnnl_success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_threadpool_interop_sgemm(
char transa,
char transb,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const float* A,
dnnl_dim_t lda,
const float* B,
dnnl_dim_t ldb,
float beta,
float* C,
dnnl_dim_t ldc,
void* threadpool
)
Performs single-precision matrix-matrix multiply.
The operation is defined as:
C := alpha * op( A ) * op( B ) + beta * C
where
op( X ) = X or op( X ) = X**T,
alpha and beta are scalars, and
A, B, and C are matrices:
op( A ) is an MxK matrix,
op( B ) is an KxN matrix,
C is an MxN matrix.
The matrices are assumed to be stored in row-major order (the elements in each of the matrix rows are contiguous in memory).
Parameters:
transa |
Transposition flag for matrix A: ‘N’ or ‘n’ means A is not transposed, and ‘T’ or ‘t’ means that A is transposed. |
transb |
Transposition flag for matrix B: ‘N’ or ‘n’ means B is not transposed, and ‘T’ or ‘t’ means that B is transposed. |
M |
The M dimension. |
N |
The N dimension. |
K |
The K dimension. |
alpha |
The alpha parameter that is used to scale the product of matrices A and B. |
A |
A pointer to the A matrix data. |
lda |
The leading dimension for the matrix A. |
B |
A pointer to the B matrix data. |
ldb |
The leading dimension for the matrix B. |
beta |
The beta parameter that is used to scale the matrix C. |
C |
A pointer to the C matrix data. |
ldc |
The leading dimension for the matrix C. |
threadpool |
A pointer to a threadpool interface (only when built with the THREADPOOL CPU runtime). |
Returns:
dnnl_success / dnnl::status::success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_threadpool_interop_gemm_u8s8s32(
char transa,
char transb,
char offsetc,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const uint8_t* A,
dnnl_dim_t lda,
uint8_t ao,
const int8_t* B,
dnnl_dim_t ldb,
int8_t bo,
float beta,
int32_t* C,
dnnl_dim_t ldc,
const int32_t* co,
void* threadpool
)
Performs integer matrix-matrix multiply on 8-bit unsigned matrix A, 8-bit signed matrix B, and 32-bit signed resulting matrix C.
The operation is defined as:
C := alpha * (op(A) - A_offset) * (op(B) - B_offset) + beta * C + C_offset
where
op( X ) = X or op( X ) = X**T,
alpha and beta are scalars, and
A, B, and C are matrices:
op( A ) is an MxK matrix,
op( B ) is an KxN matrix,
C is an MxN matrix.
A_offset is an MxK matrix with every element equal the ao value,
B_offset is an KxN matrix with every element equal the bo value,
C_offset is an MxN matrix which is defined by the co array of size len :
if offsetc = F : the len must be at least 1,
if offsetc = C : the len must be at least max(1, m),
if offsetc = R : the len must be at least max(1, n),
The matrices are assumed to be stored in row-major order (the elements in each of the matrix rows are contiguous in memory).
Parameters:
transa |
Transposition flag for matrix A: ‘N’ or ‘n’ means A is not transposed, and ‘T’ or ‘t’ means that A is transposed. |
transb |
Transposition flag for matrix B: ‘N’ or ‘n’ means B is not transposed, and ‘T’ or ‘t’ means that B is transposed. |
offsetc |
Flag specifying how offsets should be applied to matrix C:
|
M |
The M dimension. |
N |
The N dimension. |
K |
The K dimension. |
alpha |
The alpha parameter that is used to scale the product of matrices A and B. |
A |
A pointer to the A matrix data. |
lda |
The leading dimension for the matrix A. |
ao |
The offset value for the matrix A. |
B |
A pointer to the B matrix data. |
ldb |
The leading dimension for the matrix B. |
bo |
The offset value for the matrix B. |
beta |
The beta parameter that is used to scale the matrix C. |
C |
A pointer to the C matrix data. |
ldc |
The leading dimension for the matrix C. |
co |
An array of offset values for the matrix C. The number of elements in the array depends on the value of offsetc. |
threadpool |
A pointer to a threadpool interface (only when built with the THREADPOOL CPU runtime). |
Returns:
dnnl_success / dnnl::status::success on success and a status describing the error otherwise.
dnnl_status_t DNNL_API dnnl_threadpool_interop_gemm_s8s8s32(
char transa,
char transb,
char offsetc,
dnnl_dim_t M,
dnnl_dim_t N,
dnnl_dim_t K,
float alpha,
const int8_t* A,
dnnl_dim_t lda,
int8_t ao,
const int8_t* B,
dnnl_dim_t ldb,
int8_t bo,
float beta,
int32_t* C,
dnnl_dim_t ldc,
const int32_t* co,
void* threadpool
)
Performs integer matrix-matrix multiply on 8-bit signed matrix A, 8-bit signed matrix B, and 32-bit signed resulting matrix C.
The operation is defined as:
C := alpha * (op(A) - A_offset) * (op(B) - B_offset) + beta * C + C_offset
where
op( X ) = X or op( X ) = X**T,
alpha and beta are scalars, and
A, B, and C are matrices:
op( A ) is an MxK matrix,
op( B ) is an KxN matrix,
C is an MxN matrix.
A_offset is an MxK matrix with every element equal the ao value,
B_offset is an KxN matrix with every element equal the bo value,
C_offset is an MxN matrix which is defined by the co array of size len :
if offsetc = F : the len must be at least 1,
if offsetc = C : the len must be at least max(1, m),
if offsetc = R : the len must be at least max(1, n),
The matrices are assumed to be stored in row-major order (the elements in each of the matrix rows are contiguous in memory).
Parameters:
transa |
Transposition flag for matrix A: ‘N’ or ‘n’ means A is not transposed, and ‘T’ or ‘t’ means that A is transposed. |
transb |
Transposition flag for matrix B: ‘N’ or ‘n’ means B is not transposed, and ‘T’ or ‘t’ means that B is transposed. |
offsetc |
Flag specifying how offsets should be applied to matrix C:
|
M |
The M dimension. |
N |
The N dimension. |
K |
The K dimension. |
alpha |
The alpha parameter that is used to scale the product of matrices A and B. |
A |
A pointer to the A matrix data. |
lda |
The leading dimension for the matrix A. |
ao |
The offset value for the matrix A. |
B |
A pointer to the B matrix data. |
ldb |
The leading dimension for the matrix B. |
bo |
The offset value for the matrix B. |
beta |
The beta parameter that is used to scale the matrix C. |
C |
A pointer to the C matrix data. |
ldc |
The leading dimension for the matrix C. |
co |
An array of offset values for the matrix C. The number of elements in the array depends on the value of offsetc. |
threadpool |
A pointer to a threadpool interface (only when built with the THREADPOOL CPU runtime). |
Returns:
dnnl_success / dnnl::status::success on success and a status describing the error otherwise.