Commit f7137096 authored by YdrMaster's avatar YdrMaster
Browse files

issue/63/refactor: 重构 Matmul 所有实现,添加命名空间


Signed-off-by: default avatarYdrMaster <ydrml@hotmail.com>
parent 8e34901e
#include "infiniop/ops/matmul.h" #include "infiniop/ops/matmul.h"
#ifdef ENABLE_CPU_API #ifdef ENABLE_CPU_API
#include "cpu/matmul_cpu_api.h" #include "cpu/matmul_cpu.h"
#endif #endif
#ifdef ENABLE_CUDA_API #ifdef ENABLE_CUDA_API
#include "cuda/matmul_cuda_api.h" #include "cuda/matmul_cuda.cuh"
#endif #endif
#ifdef ENABLE_CAMBRICON_API #ifdef ENABLE_CAMBRICON_API
#include "bang/matmul_cnnl_api.h" #include "bang/matmul_bang.h"
#endif #endif
#ifdef ENABLE_ASCEND_API #ifdef ENABLE_ASCEND_API
#include "ascend/matmul_aclnn_api.h" #include "ascend/matmul_ascend.h"
#endif #endif
__C infiniopStatus_t infiniopCreateMatmulDescriptor( __C infiniopStatus_t infiniopCreateMatmulDescriptor(
infiniopHandle_t handle, infiniopMatmulDescriptor_t *desc_ptr, infiniopHandle_t handle,
infiniopTensorDescriptor_t c_desc, infiniopTensorDescriptor_t a_desc, infiniopMatmulDescriptor_t *desc_ptr,
infiniopTensorDescriptor_t c_desc,
infiniopTensorDescriptor_t a_desc,
infiniopTensorDescriptor_t b_desc) { infiniopTensorDescriptor_t b_desc) {
#define CREATE(CASE, HANDLE, NAMESPACE) \
case CASE: \
return matmul::NAMESPACE::Descriptor::create( \
reinterpret_cast<HANDLE>(handle), \
reinterpret_cast<matmul::NAMESPACE::Descriptor **>(desc_ptr), \
c_desc, \
a_desc, \
b_desc)
switch (handle->device) { switch (handle->device) {
#ifdef ENABLE_CPU_API #ifdef ENABLE_CPU_API
case INFINI_DEVICE_CPU: CREATE(INFINI_DEVICE_CPU, infiniopCpuHandle_t, cpu);
return cpuCreateMatmulDescriptor(
(infiniopCpuHandle_t)handle,
(infiniopMatmulCpuDescriptor_t *)desc_ptr, c_desc, a_desc, b_desc);
#endif #endif
#ifdef ENABLE_CUDA_API #ifdef ENABLE_CUDA_API
case INFINI_DEVICE_NVIDIA: { CREATE(INFINI_DEVICE_NVIDIA, infiniopCudaHandle_t, cuda);
return cudaCreateMatmulDescriptor(
(infiniopCudaHandle_t)handle,
(infiniopMatmulCudaDescriptor_t *)desc_ptr, c_desc, a_desc, b_desc);
}
#endif #endif
#ifdef ENABLE_CAMBRICON_API #ifdef ENABLE_CAMBRICON_API
case INFINI_DEVICE_CAMBRICON: { CREATE(INFINI_DEVICE_CAMBRICON, infiniopBangHandle_t, bang);
return bangCreateMatmulDescriptor(
(infiniopBangHandle_t)handle,
(infiniopMatmulBangDescriptor_t *)desc_ptr, c_desc, a_desc, b_desc);
}
#endif #endif
#ifdef ENABLE_ASCEND_API #ifdef ENABLE_ASCEND_API
case INFINI_DEVICE_ASCEND: { CREATE(INFINI_DEVICE_ASCEND, infiniopAscendHandle_t, ascend);
return aclnnCreateMatmulDescriptor((infiniopAscendHandle_t)handle,
(MatmulAclnnDescriptor_t *)desc_ptr,
c_desc, a_desc, b_desc, 1);
}
#endif #endif
default:
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
} }
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
#undef CREATE
} }
__C infiniopStatus_t __C infiniopStatus_t
infiniopGetMatmulWorkspaceSize(infiniopMatmulDescriptor_t desc, size_t *size) { infiniopGetMatmulWorkspaceSize(
infiniopMatmulDescriptor_t desc,
size_t *size) {
#define GET(CASE, NAMESPACE) \
case CASE: \
*size = reinterpret_cast<matmul::NAMESPACE::Descriptor const *>(desc)->workspace_size; \
return INFINIOP_STATUS_SUCCESS
switch (desc->device_type) { switch (desc->device_type) {
#ifdef ENABLE_CPU_API #ifdef ENABLE_CPU_API
case INFINI_DEVICE_CPU: GET(INFINI_DEVICE_CPU, cpu);
return cpuGetMatmulWorkspaceSize((infiniopMatmulCpuDescriptor_t)desc,
size);
#endif #endif
#ifdef ENABLE_CUDA_API #ifdef ENABLE_CUDA_API
case INFINI_DEVICE_NVIDIA: { GET(INFINI_DEVICE_NVIDIA, cuda);
return cudaGetMatmulWorkspaceSize((infiniopMatmulCudaDescriptor_t)desc,
size);
}
#endif #endif
#ifdef ENABLE_CAMBRICON_API #ifdef ENABLE_CAMBRICON_API
case INFINI_DEVICE_CAMBRICON: { GET(INFINI_DEVICE_CAMBRICON, bang);
return bangGetMatmulWorkspaceSize((infiniopMatmulBangDescriptor_t)desc,
size);
}
#endif #endif
#ifdef ENABLE_ASCEND_API #ifdef ENABLE_ASCEND_API
case INFINI_DEVICE_ASCEND: { GET(INFINI_DEVICE_ASCEND, ascend);
return aclnnGetMatmulWorkspaceSize((MatmulAclnnDescriptor_t)desc, size);
}
#endif #endif
default:
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
} }
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
#undef GET
} }
__C infiniopStatus_t infiniopMatmul(infiniopMatmulDescriptor_t desc, __C infiniopStatus_t infiniopMatmul(
void *workspace, size_t workspace_size, infiniopMatmulDescriptor_t desc,
void *c, void const *a, void const *b, void *workspace, size_t workspace_size,
float alpha, float beta, void *stream) { void *c,
void const *a,
void const *b,
float alpha,
float beta,
void *stream) {
#define CALCULATE(CASE, NAMESPACE) \
case CASE: \
return reinterpret_cast<matmul::NAMESPACE::Descriptor const *>(desc) \
->calculate(workspace, workspace_size, \
c, beta, \
a, b, alpha, \
stream)
switch (desc->device_type) { switch (desc->device_type) {
#ifdef ENABLE_CPU_API #ifdef ENABLE_CPU_API
case INFINI_DEVICE_CPU: CALCULATE(INFINI_DEVICE_CPU, cpu);
return cpuMatmul((infiniopMatmulCpuDescriptor_t)desc, workspace,
workspace_size, c, a, b, alpha, beta);
#endif #endif
#ifdef ENABLE_CUDA_API #ifdef ENABLE_CUDA_API
case INFINI_DEVICE_NVIDIA: CALCULATE(INFINI_DEVICE_NVIDIA, cuda);
return cudaMatmul((infiniopMatmulCudaDescriptor_t)desc, workspace,
workspace_size, c, a, b, alpha, beta, stream);
#endif #endif
#ifdef ENABLE_CAMBRICON_API #ifdef ENABLE_CAMBRICON_API
case INFINI_DEVICE_CAMBRICON: { CALCULATE(INFINI_DEVICE_CAMBRICON, bang);
return bangMatmul((infiniopMatmulBangDescriptor_t)desc, workspace,
workspace_size, c, a, b, alpha, beta, stream);
}
#endif #endif
#ifdef ENABLE_ASCEND_API #ifdef ENABLE_ASCEND_API
case INFINI_DEVICE_ASCEND: CALCULATE(INFINI_DEVICE_ASCEND, ascend);
return aclnnMatmul((MatmulAclnnDescriptor_t)desc, workspace,
workspace_size, c, a, b, alpha, beta, stream);
#endif #endif
default:
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
} }
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
#undef CALCULATE
} }
__C infiniopStatus_t __C infiniopStatus_t
infiniopDestroyMatmulDescriptor(infiniopMatmulDescriptor_t desc) { infiniopDestroyMatmulDescriptor(infiniopMatmulDescriptor_t desc) {
#define DELETE(CASE, NAMESPACE) \
case CASE: \
delete reinterpret_cast<matmul::NAMESPACE::Descriptor const *>(desc); \
return INFINIOP_STATUS_SUCCESS;
switch (desc->device_type) { switch (desc->device_type) {
#ifdef ENABLE_CPU_API #ifdef ENABLE_CPU_API
case INFINI_DEVICE_CPU: DELETE(INFINI_DEVICE_CPU, cpu);
return cpuDestroyMatmulDescriptor((infiniopMatmulCpuDescriptor_t)desc);
#endif #endif
#ifdef ENABLE_CUDA_API #ifdef ENABLE_CUDA_API
case INFINI_DEVICE_NVIDIA: { DELETE(INFINI_DEVICE_NVIDIA, cuda);
return cudaDestroyMatmulDescriptor(
(infiniopMatmulCudaDescriptor_t)desc);
}
#endif #endif
#ifdef ENABLE_CAMBRICON_API #ifdef ENABLE_CAMBRICON_API
case INFINI_DEVICE_CAMBRICON: { DELETE(INFINI_DEVICE_CAMBRICON, bang);
return bangDestroyMatmulDescriptor((infiniopMatmulBangDescriptor_t)desc);
}
#endif #endif
#ifdef ENABLE_ASCEND_API #ifdef ENABLE_ASCEND_API
case INFINI_DEVICE_ASCEND: { DELETE(INFINI_DEVICE_ASCEND, ascend);
return aclnnDestroyMatmulDescriptor((MatmulAclnnDescriptor_t)desc);
}
#endif #endif
default:
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
} }
return INFINIOP_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
#undef DELETE
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment