Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jerrrrry
infinicore
Commits
f7137096
Commit
f7137096
authored
Feb 19, 2025
by
YdrMaster
Browse files
issue/63/refactor: 重构 Matmul 所有实现,添加命名空间
Signed-off-by:
YdrMaster
<
ydrml@hotmail.com
>
parent
8e34901e
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
91 additions
and
75 deletions
+91
-75
src/infiniop/ops/matmul/operator.cc
src/infiniop/ops/matmul/operator.cc
+91
-75
No files found.
src/infiniop/ops/matmul/operator.cc
View file @
f7137096
#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
.cu
h"
#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_a
clnn_api
.h"
#include "ascend/matmul_a
scend
.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
}
}
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment