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
f0300ff3
Commit
f0300ff3
authored
Jul 03, 2025
by
wooway777
Browse files
issue/300 - InfiniCCL Cambricon
parent
8366330c
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
157 additions
and
0 deletions
+157
-0
src/infiniccl/cambricon/infiniccl_cambricon.cc
src/infiniccl/cambricon/infiniccl_cambricon.cc
+102
-0
src/infiniccl/cambricon/infiniccl_cambricon.h
src/infiniccl/cambricon/infiniccl_cambricon.h
+12
-0
src/infiniccl/infiniccl.cc
src/infiniccl/infiniccl.cc
+4
-0
src/infinirt/bang/infinirt_bang.cc
src/infinirt/bang/infinirt_bang.cc
+1
-0
xmake.lua
xmake.lua
+3
-0
xmake/bang.lua
xmake/bang.lua
+35
-0
No files found.
src/infiniccl/cambricon/infiniccl_cambricon.cc
0 → 100644
View file @
f0300ff3
#include "infiniccl_cambricon.h"
#include "../../utils.h"
#include <cncl.h>
#include <cnrt.h>
#include <iostream>
#include <vector>
#define CHECK_CNCL(API__) CHECK_INTERNAL(API__, CNCL_RET_SUCCESS)
inline
cnrtQueue_t
getCambriconStream
(
infinirtStream_t
stream
)
{
if
(
stream
==
nullptr
)
{
return
(
cnrtQueue_t
)(
0
);
}
return
static_cast
<
cnrtQueue_t
>
(
stream
);
}
inline
cnclComm_t
getCnclComm
(
infinicclComm_t
comm
)
{
return
static_cast
<
cnclComm_t
>
(
comm
->
comm
);
}
inline
cnclDataType_t
getCnclDtype
(
infiniDtype_t
datatype
)
{
switch
(
datatype
)
{
case
INFINI_DTYPE_F32
:
return
cnclFloat32
;
case
INFINI_DTYPE_F16
:
return
cnclFloat16
;
default:
std
::
cerr
<<
"Unsupported data type: "
<<
datatype
<<
std
::
endl
;
std
::
abort
();
return
cnclFloat16
;
}
}
inline
cnclReduceOp_t
getCnclRedOp
(
infinicclReduceOp_t
op
)
{
switch
(
op
)
{
case
INFINICCL_SUM
:
return
cnclSum
;
case
INFINICCL_PROD
:
return
cnclProd
;
case
INFINICCL_MAX
:
return
cnclMax
;
case
INFINICCL_MIN
:
return
cnclMin
;
default:
std
::
abort
();
return
cnclSum
;
}
}
namespace
infiniccl
::
cambricon
{
infiniStatus_t
commInitAll
(
infinicclComm_t
*
comms
,
int
ndevice
,
const
int
*
device_ids
)
{
std
::
vector
<
cnclComm_t
>
cncl_comms
(
ndevice
);
std
::
vector
<
int
>
rank_list
(
ndevice
);
for
(
int
i
=
0
;
i
<
ndevice
;
i
++
)
{
rank_list
[
i
]
=
i
;
CHECK_INTERNAL
(
cnrtSetDevice
(
device_ids
[
i
]),
CNRT_RET_SUCCESS
);
}
CHECK_CNCL
(
cnclInitComms
(
cncl_comms
.
data
(),
ndevice
,
(
int
const
*
)
device_ids
,
rank_list
.
data
(),
ndevice
,
nullptr
));
for
(
int
i
=
0
;
i
<
ndevice
;
i
++
)
{
comms
[
i
]
=
new
InfinicclComm
{
INFINI_DEVICE_CAMBRICON
,
device_ids
[
i
],
(
void
*
)(
cncl_comms
[
i
])};
}
return
INFINI_STATUS_SUCCESS
;
}
infiniStatus_t
commDestroy
(
infinicclComm_t
comm
)
{
CHECK_CNCL
(
cnclFreeComm
(
getCnclComm
(
comm
)));
delete
comm
;
return
INFINI_STATUS_SUCCESS
;
}
infiniStatus_t
allReduce
(
void
*
sendbuf
,
void
*
recvbuf
,
size_t
count
,
infiniDtype_t
datatype
,
infinicclReduceOp_t
op
,
infinicclComm_t
comm
,
infinirtStream_t
stream
)
{
if
(
datatype
!=
INFINI_DTYPE_F32
&&
datatype
!=
INFINI_DTYPE_F16
)
{
return
INFINI_STATUS_BAD_PARAM
;
}
CHECK_CNCL
(
cnclAllReduce
(
sendbuf
,
recvbuf
,
count
,
getCnclDtype
(
datatype
),
getCnclRedOp
(
op
),
getCnclComm
(
comm
),
getCambriconStream
(
stream
)));
return
INFINI_STATUS_SUCCESS
;
}
}
// namespace infiniccl::cambricon
src/infiniccl/cambricon/infiniccl_cambricon.h
0 → 100644
View file @
f0300ff3
#ifndef INFINICCL_CAMBRICON_H_
#define INFINICCL_CAMBRICON_H_
#include "../infiniccl_impl.h"
#if defined(ENABLE_CAMBRICON_API) && defined(ENABLE_CCL)
INFINICCL_DEVICE_API_IMPL
(
cambricon
)
#else
INFINICCL_DEVICE_API_NOOP
(
cambricon
)
#endif
#endif
/* INFINICCL_CAMBRICON_H_ */
src/infiniccl/infiniccl.cc
View file @
f0300ff3
#include "infiniccl.h"
#include "infiniccl.h"
#include "./ascend/infiniccl_ascend.h"
#include "./ascend/infiniccl_ascend.h"
#include "./cambricon/infiniccl_cambricon.h"
#include "./cuda/infiniccl_cuda.h"
#include "./cuda/infiniccl_cuda.h"
#include "./maca/infiniccl_maca.h"
#include "./maca/infiniccl_maca.h"
...
@@ -17,6 +18,7 @@ __C infiniStatus_t infinicclCommInitAll(
...
@@ -17,6 +18,7 @@ __C infiniStatus_t infinicclCommInitAll(
switch
(
device_type
)
{
switch
(
device_type
)
{
COMM_INIT_ALL
(
INFINI_DEVICE_NVIDIA
,
cuda
)
COMM_INIT_ALL
(
INFINI_DEVICE_NVIDIA
,
cuda
)
COMM_INIT_ALL
(
INFINI_DEVICE_ASCEND
,
ascend
)
COMM_INIT_ALL
(
INFINI_DEVICE_ASCEND
,
ascend
)
COMM_INIT_ALL
(
INFINI_DEVICE_CAMBRICON
,
cambricon
)
COMM_INIT_ALL
(
INFINI_DEVICE_METAX
,
maca
)
COMM_INIT_ALL
(
INFINI_DEVICE_METAX
,
maca
)
default:
default:
return
INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
;
return
INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED
;
...
@@ -37,6 +39,7 @@ __C infiniStatus_t infinicclCommDestroy(infinicclComm_t comm) {
...
@@ -37,6 +39,7 @@ __C infiniStatus_t infinicclCommDestroy(infinicclComm_t comm) {
switch
(
comm
->
device_type
)
{
switch
(
comm
->
device_type
)
{
COMM_DESTROY
(
INFINI_DEVICE_NVIDIA
,
cuda
)
COMM_DESTROY
(
INFINI_DEVICE_NVIDIA
,
cuda
)
COMM_DESTROY
(
INFINI_DEVICE_ASCEND
,
ascend
)
COMM_DESTROY
(
INFINI_DEVICE_ASCEND
,
ascend
)
COMM_DESTROY
(
INFINI_DEVICE_CAMBRICON
,
cambricon
)
COMM_DESTROY
(
INFINI_DEVICE_METAX
,
maca
)
COMM_DESTROY
(
INFINI_DEVICE_METAX
,
maca
)
default:
default:
...
@@ -65,6 +68,7 @@ __C infiniStatus_t infinicclAllReduce(
...
@@ -65,6 +68,7 @@ __C infiniStatus_t infinicclAllReduce(
switch
(
comm
->
device_type
)
{
switch
(
comm
->
device_type
)
{
ALL_REDUCE
(
INFINI_DEVICE_NVIDIA
,
cuda
)
ALL_REDUCE
(
INFINI_DEVICE_NVIDIA
,
cuda
)
ALL_REDUCE
(
INFINI_DEVICE_ASCEND
,
ascend
)
ALL_REDUCE
(
INFINI_DEVICE_ASCEND
,
ascend
)
ALL_REDUCE
(
INFINI_DEVICE_CAMBRICON
,
cambricon
)
ALL_REDUCE
(
INFINI_DEVICE_METAX
,
maca
)
ALL_REDUCE
(
INFINI_DEVICE_METAX
,
maca
)
default:
default:
...
...
src/infinirt/bang/infinirt_bang.cc
View file @
f0300ff3
...
@@ -8,6 +8,7 @@ namespace infinirt::bang {
...
@@ -8,6 +8,7 @@ namespace infinirt::bang {
infiniStatus_t
getDeviceCount
(
int
*
count
)
{
infiniStatus_t
getDeviceCount
(
int
*
count
)
{
unsigned
int
device_count
=
static_cast
<
unsigned
int
>
(
*
count
);
unsigned
int
device_count
=
static_cast
<
unsigned
int
>
(
*
count
);
CHECK_BANGRT
(
cnrtGetDeviceCount
(
&
device_count
));
CHECK_BANGRT
(
cnrtGetDeviceCount
(
&
device_count
));
*
count
=
static_cast
<
int
>
(
device_count
);
return
INFINI_STATUS_SUCCESS
;
return
INFINI_STATUS_SUCCESS
;
}
}
...
...
xmake.lua
View file @
f0300ff3
...
@@ -264,6 +264,9 @@ target("infiniccl")
...
@@ -264,6 +264,9 @@ target("infiniccl")
if
has_config
(
"ascend-npu"
)
then
if
has_config
(
"ascend-npu"
)
then
add_deps
(
"infiniccl-ascend"
)
add_deps
(
"infiniccl-ascend"
)
end
end
if
has_config
(
"cambricon-mlu"
)
then
add_deps
(
"infiniccl-cambricon"
)
end
if
has_config
(
"metax-gpu"
)
then
if
has_config
(
"metax-gpu"
)
then
add_deps
(
"infiniccl-metax"
)
add_deps
(
"infiniccl-metax"
)
end
end
...
...
xmake/bang.lua
View file @
f0300ff3
...
@@ -60,3 +60,38 @@ target("infinirt-cambricon")
...
@@ -60,3 +60,38 @@ target("infinirt-cambricon")
add_files
(
"../src/infinirt/bang/*.cc"
)
add_files
(
"../src/infinirt/bang/*.cc"
)
add_cxflags
(
"-lstdc++ -Wall -Werror -fPIC"
)
add_cxflags
(
"-lstdc++ -Wall -Werror -fPIC"
)
target_end
()
target_end
()
target
(
"infiniccl-cambricon"
)
set_kind
(
"static"
)
add_deps
(
"infinirt"
)
add_deps
(
"infini-utils"
)
set_warnings
(
"all"
,
"error"
)
set_languages
(
"cxx17"
)
on_install
(
function
(
target
)
end
)
if
has_config
(
"ccl"
)
then
if
is_plat
(
"linux"
)
then
add_includedirs
(
NEUWARE_HOME
..
"/include"
)
add_linkdirs
(
NEUWARE_HOME
..
"/lib64"
)
add_links
(
"cncl"
,
"cnrt"
)
if
has_package
(
"libibverbs"
)
then
add_links
(
"ibverbs"
)
add_defines
(
"CNCL_RDMA_ENABLED=1"
)
end
if
is_arch
(
"arm64"
)
then
add_defines
(
"CNCL_ARM64_COMPAT_MODE=1"
)
end
add_rpathdirs
(
NEUWARE_HOME
..
"/lib64"
)
add_runenvs
(
"LD_LIBRARY_PATH"
,
NEUWARE_HOME
..
"/lib64"
)
add_files
(
"../src/infiniccl/cambricon/*.cc"
)
add_cxflags
(
"-fPIC"
)
add_ldflags
(
"-fPIC"
)
else
print
(
"[Warning] CNCL is currently only supported on Linux"
)
end
end
target_end
()
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