infiniccl.cc 3.8 KB
Newer Older
1
2
#include "infiniccl.h"

Pan Zezhong's avatar
Pan Zezhong committed
3
#include "./ascend/infiniccl_ascend.h"
wooway777's avatar
wooway777 committed
4
#include "./cambricon/infiniccl_cambricon.h"
5
#include "./cuda/infiniccl_cuda.h"
6
#include "./kunlun/infiniccl_kunlun.h"
7
#include "./metax/infiniccl_metax.h"
spike-zhu's avatar
spike-zhu committed
8
#include "./moore/infiniccl_moore.h"
9

zhangyue's avatar
zhangyue committed
10
11
12
13
14
namespace infiniccl::cuda {
infiniStatus_t commSetHygonCustomAllreduce(
    infinicclComm_t comm, void *custom_allreduce, void *reg_buffer, size_t reg_buffer_bytes);
}

15
__INFINI_C infiniStatus_t infinicclCommInitAll(
16
17
18
19
20
21
22
    infiniDevice_t device_type,
    infinicclComm_t *comms,
    int ndevice,
    const int *device_ids) {

#define COMM_INIT_ALL(CASE_, NAMESPACE_) \
    case CASE_:                          \
zhangyue's avatar
zhangyue committed
23
        return infiniccl::NAMESPACE_::commInitAll(device_type, comms, ndevice, device_ids)
24
25

    switch (device_type) {
YdrMaster's avatar
YdrMaster committed
26
27
        COMM_INIT_ALL(INFINI_DEVICE_NVIDIA, cuda);
        COMM_INIT_ALL(INFINI_DEVICE_ILUVATAR, cuda);
28
        COMM_INIT_ALL(INFINI_DEVICE_QY, cuda);
29
        COMM_INIT_ALL(INFINI_DEVICE_HYGON, cuda);
YdrMaster's avatar
YdrMaster committed
30
        COMM_INIT_ALL(INFINI_DEVICE_ASCEND, ascend);
31
        COMM_INIT_ALL(INFINI_DEVICE_CAMBRICON, cambricon);
YdrMaster's avatar
YdrMaster committed
32
        COMM_INIT_ALL(INFINI_DEVICE_METAX, metax);
spike-zhu's avatar
spike-zhu committed
33
        COMM_INIT_ALL(INFINI_DEVICE_MOORE, moore);
34
        COMM_INIT_ALL(INFINI_DEVICE_KUNLUN, kunlun);
wooway777's avatar
wooway777 committed
35
        COMM_INIT_ALL(INFINI_DEVICE_ALI, cuda);
36
37
38
39
40
41
42
    default:
        return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
    }

#undef COMM_INIT_ALL
}

43
__INFINI_C infiniStatus_t infinicclCommDestroy(infinicclComm_t comm) {
44
45
46
47
48
49
    if (comm == nullptr) {
        return INFINI_STATUS_SUCCESS;
    }

#define COMM_DESTROY(CASE_, NAMESPACE_) \
    case CASE_:                         \
YdrMaster's avatar
YdrMaster committed
50
        return infiniccl::NAMESPACE_::commDestroy(comm)
51
52

    switch (comm->device_type) {
YdrMaster's avatar
YdrMaster committed
53
54
        COMM_DESTROY(INFINI_DEVICE_NVIDIA, cuda);
        COMM_DESTROY(INFINI_DEVICE_ILUVATAR, cuda);
55
        COMM_DESTROY(INFINI_DEVICE_QY, cuda);
56
        COMM_DESTROY(INFINI_DEVICE_HYGON, cuda);
YdrMaster's avatar
YdrMaster committed
57
        COMM_DESTROY(INFINI_DEVICE_ASCEND, ascend);
58
        COMM_DESTROY(INFINI_DEVICE_CAMBRICON, cambricon);
YdrMaster's avatar
YdrMaster committed
59
        COMM_DESTROY(INFINI_DEVICE_METAX, metax);
spike-zhu's avatar
spike-zhu committed
60
        COMM_DESTROY(INFINI_DEVICE_MOORE, moore);
61
        COMM_DESTROY(INFINI_DEVICE_KUNLUN, kunlun);
wooway777's avatar
wooway777 committed
62
        COMM_DESTROY(INFINI_DEVICE_ALI, cuda);
63
64
65
66
67
68
    default:
        return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
    }
#undef COMM_DESTROY
}

zhangyue's avatar
zhangyue committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
__INFINI_C infiniStatus_t infinicclCommSetHygonCustomAllreduce(
    infinicclComm_t comm,
    void *custom_allreduce,
    void *reg_buffer,
    size_t reg_buffer_bytes) {

    if (comm == nullptr) {
        return INFINI_STATUS_NULL_POINTER;
    }

    if (comm->device_type != INFINI_DEVICE_HYGON) {
        return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
    }

    return infiniccl::cuda::commSetHygonCustomAllreduce(comm, custom_allreduce, reg_buffer, reg_buffer_bytes);
}

86
__INFINI_C infiniStatus_t infinicclAllReduce(
87
88
89
90
91
92
93
94
95
96
97
98
99
100
    void *sendbuf,
    void *recvbuf,
    size_t count,
    infiniDtype_t dataype,
    infinicclReduceOp_t op,
    infinicclComm_t comm,
    infinirtStream_t stream) {

    if (comm == nullptr) {
        return INFINI_STATUS_NULL_POINTER;
    }

#define ALL_REDUCE(CASE_, NAMESPACE_) \
    case CASE_:                       \
YdrMaster's avatar
YdrMaster committed
101
        return infiniccl::NAMESPACE_::allReduce(sendbuf, recvbuf, count, dataype, op, comm, stream)
102
103

    switch (comm->device_type) {
YdrMaster's avatar
YdrMaster committed
104
105
        ALL_REDUCE(INFINI_DEVICE_NVIDIA, cuda);
        ALL_REDUCE(INFINI_DEVICE_ILUVATAR, cuda);
106
        ALL_REDUCE(INFINI_DEVICE_QY, cuda);
107
        ALL_REDUCE(INFINI_DEVICE_HYGON, cuda);
YdrMaster's avatar
YdrMaster committed
108
        ALL_REDUCE(INFINI_DEVICE_ASCEND, ascend);
109
        ALL_REDUCE(INFINI_DEVICE_CAMBRICON, cambricon);
YdrMaster's avatar
YdrMaster committed
110
        ALL_REDUCE(INFINI_DEVICE_METAX, metax);
spike-zhu's avatar
spike-zhu committed
111
        ALL_REDUCE(INFINI_DEVICE_MOORE, moore);
112
        ALL_REDUCE(INFINI_DEVICE_KUNLUN, kunlun);
wooway777's avatar
wooway777 committed
113
        ALL_REDUCE(INFINI_DEVICE_ALI, cuda);
PanZezhong's avatar
PanZezhong committed
114

115
116
117
118
119
120
    default:
        return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
    }

#undef ALL_REDUCE
}