Unverified Commit f2bb97ad authored by spike-zhu's avatar spike-zhu Committed by GitHub
Browse files

issue/294: 摩尔通信库接入

parent d3d6fee0
......@@ -4,6 +4,7 @@
#include "./cambricon/infiniccl_cambricon.h"
#include "./cuda/infiniccl_cuda.h"
#include "./metax/infiniccl_metax.h"
#include "./moore/infiniccl_moore.h"
__C infiniStatus_t infinicclCommInitAll(
infiniDevice_t device_type,
......@@ -21,6 +22,7 @@ __C infiniStatus_t infinicclCommInitAll(
COMM_INIT_ALL(INFINI_DEVICE_ASCEND, ascend);
COMM_INIT_ALL(INFINI_DEVICE_CAMBRICON, cambricon);
COMM_INIT_ALL(INFINI_DEVICE_METAX, metax);
COMM_INIT_ALL(INFINI_DEVICE_MOORE, moore);
default:
return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
}
......@@ -43,6 +45,7 @@ __C infiniStatus_t infinicclCommDestroy(infinicclComm_t comm) {
COMM_DESTROY(INFINI_DEVICE_ASCEND, ascend);
COMM_DESTROY(INFINI_DEVICE_CAMBRICON, cambricon);
COMM_DESTROY(INFINI_DEVICE_METAX, metax);
COMM_DESTROY(INFINI_DEVICE_MOORE, moore);
default:
return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
......@@ -73,6 +76,7 @@ __C infiniStatus_t infinicclAllReduce(
ALL_REDUCE(INFINI_DEVICE_ASCEND, ascend);
ALL_REDUCE(INFINI_DEVICE_CAMBRICON, cambricon);
ALL_REDUCE(INFINI_DEVICE_METAX, metax);
ALL_REDUCE(INFINI_DEVICE_MOORE, moore);
default:
return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
......
#include "infiniccl_moore.h"
#include "../../utils.h"
#include <mccl.h>
#include <musa_runtime.h>
#include <iostream>
#include <vector>
#define CHECK_MCCL(API__) CHECK_INTERNAL(API__, mcclSuccess)
inline musaStream_t getMusaStream(infinirtStream_t stream) {
if (stream == nullptr) {
return 0;
}
return static_cast<musaStream_t>(stream);
}
inline mcclDataType_t getMcclDtype(infiniDtype_t datatype) {
switch (datatype) {
case INFINI_DTYPE_F32:
return mcclFloat;
case INFINI_DTYPE_F16:
return mcclHalf;
default:
std::abort();
return mcclHalf;
}
}
inline mcclRedOp_t getMcclRedOp(infinicclReduceOp_t op) {
switch (op) {
case INFINICCL_SUM:
return mcclSum;
case INFINICCL_PROD:
return mcclProd;
case INFINICCL_MAX:
return mcclMax;
case INFINICCL_MIN:
return mcclMin;
case INFINICCL_AVG:
return mcclAvg;
default:
std::abort();
return mcclSum;
}
}
inline mcclComm_t getMcclComm(infinicclComm_t comm) {
return static_cast<mcclComm_t>(comm->comm);
}
namespace infiniccl::moore {
infiniStatus_t commInitAll(
infinicclComm_t *comms,
int ndevice,
const int *device_ids) {
std::vector<mcclComm_t> mccl_comms(ndevice);
CHECK_MCCL(mcclCommInitAll(mccl_comms.data(), ndevice, (int const *)device_ids));
for (int i = 0; i < ndevice; i++) {
comms[i] = new InfinicclComm{INFINI_DEVICE_MOORE, device_ids[i], (void *)(mccl_comms[i])};
}
return INFINI_STATUS_SUCCESS;
}
infiniStatus_t commDestroy(infinicclComm_t comm) {
CHECK_MCCL(mcclCommDestroy(getMcclComm(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_MCCL(mcclAllReduce(sendbuf, recvbuf, count, getMcclDtype(datatype),
getMcclRedOp(op), getMcclComm(comm), getMusaStream(stream)));
return INFINI_STATUS_SUCCESS;
}
} // namespace infiniccl::moore
#ifndef INFINICCL_MOORE_H_
#define INFINICCL_MOORE_H_
#include "../infiniccl_impl.h"
#if defined(ENABLE_MOORE_API) && defined(ENABLE_CCL)
INFINICCL_DEVICE_API_IMPL(moore)
#else
INFINICCL_DEVICE_API_NOOP(moore)
#endif
#endif /* INFINICCL_MOORE_H_ */
......@@ -298,6 +298,10 @@ target("infiniccl")
add_deps("infiniccl-iluvatar")
end
if has_config("moore-gpu") then
add_deps("infiniccl-moore")
end
set_languages("cxx17")
add_files("src/infiniccl/*.cc")
......
......@@ -55,3 +55,19 @@ target("infinirt-moore")
add_cxflags("-lstdc++", "-fPIC")
add_files("../src/infinirt/moore/*.cc")
target_end()
target("infiniccl-moore")
set_kind("static")
add_deps("infinirt")
on_install(function (target) end)
set_warnings("all", "error")
if not is_plat("windows") then
add_cxflags("-fPIC")
end
if has_config("ccl") then
add_links("libmccl.so")
add_files("../src/infiniccl/moore/*.cc")
end
set_languages("cxx17")
target_end()
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