Skip to content

Commit 26cb1de

Browse files
author
zhuyue
committed
Adapt seven operators to Hygon machines.
1 parent 3959c94 commit 26cb1de

File tree

27 files changed

+341
-52
lines changed

27 files changed

+341
-52
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ InfiniCore 是一个跨平台统一编程工具集,为不同芯片平台的功
1919
- 摩尔线程 GPU;
2020
- 天数智芯 GPU;
2121
- 沐曦 GPU;
22-
- 曙光 DCU;
22+
- 海光 DCU;
2323
- 华为昇腾 NPU;
2424
- 寒武纪 MLU;
2525
- 昆仑芯 XPU;
@@ -50,7 +50,7 @@ python scripts/install.py [XMAKE_CONFIG_FLAGS]
5050
| `--metax-gpu=[y\|n]` | 是否编译沐曦 GPU 接口实现 | n
5151
| `--moore-gpu=[y\|n]` | 是否编译摩尔线程 GPU 接口实现 | n
5252
| `--iluvatar-gpu=[y\|n]` | 是否编译沐曦 GPU 接口实现 | n
53-
| `--sugon-dcu=[y\|n]` | 是否编译曙光 DCU 接口实现 | n
53+
| `--hygon-dcu=[y\|n]` | 是否编译海光 DCU 接口实现 | n
5454
| `--kunlun-xpu=[y\|n]` | 是否编译昆仑 XPU 接口实现 | n
5555
| `--ninetoothed=[y\|n]` | 是否编译九齿实现 | n
5656
| `--ccl=[y\|n]` | 是否编译 InfiniCCL 通信库接口实现 | n

include/infinicore.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ typedef enum {
4545
INFINI_DEVICE_MOORE = 5,
4646
INFINI_DEVICE_ILUVATAR = 6,
4747
INFINI_DEVICE_KUNLUN = 7,
48-
INFINI_DEVICE_SUGON = 8,
48+
INFINI_DEVICE_HYGON = 8,
4949
INFINI_DEVICE_TYPE_COUNT
5050
} infiniDevice_t;
5151

src/infiniccl-test/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ void printUsage() {
1212
std::cout << "infiniccl-test --<device>" << std::endl
1313
<< std::endl;
1414
std::cout << " --<device>" << std::endl;
15-
std::cout << " Specify the device type --(nvidia|cambricon|ascend|metax|moore|iluvatar|kunlun|sugon)." << std::endl
15+
std::cout << " Specify the device type --(nvidia|cambricon|ascend|metax|moore|iluvatar|kunlun|hygon)." << std::endl
1616
<< std::endl;
1717
std::cout << "The program will run tests on all visible devices of the specified device type."
1818
<< " Use Environmental Variables such as CUDA_VSIBLE_DEVICES to limit visible device IDs.";
@@ -44,7 +44,7 @@ ParsedArgs parseArgs(int argc, char *argv[]) {
4444
else PARSE_DEVICE("--moore", INFINI_DEVICE_MOORE)
4545
else PARSE_DEVICE("--iluvatar", INFINI_DEVICE_ILUVATAR)
4646
else PARSE_DEVICE("--kunlun", INFINI_DEVICE_KUNLUN)
47-
else PARSE_DEVICE("--sugon", INFINI_DEVICE_SUGON)
47+
else PARSE_DEVICE("--hygon", INFINI_DEVICE_HYGON)
4848
else {
4949
printUsage();
5050
}

src/infiniccl/cuda/infiniccl_cuda.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "../infiniccl_impl.h"
55

66
// Windows does not support CUDA
7-
#if (defined(ENABLE_NVIDIA_API) || defined(ENABLE_ILUVATAR_API)) && defined(ENABLE_CCL) && !defined(_WIN32)
7+
#if (defined(ENABLE_NVIDIA_API) || defined(ENABLE_ILUVATAR_API) || defined(ENABLE_HYGON_API)) && defined(ENABLE_CCL) && !defined(_WIN32)
88
INFINICCL_DEVICE_API_IMPL(cuda)
99
#else
1010
INFINICCL_DEVICE_API_NOOP(cuda)

src/infiniccl/infiniccl.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ __C infiniStatus_t infinicclCommInitAll(
2020
switch (device_type) {
2121
COMM_INIT_ALL(INFINI_DEVICE_NVIDIA, cuda);
2222
COMM_INIT_ALL(INFINI_DEVICE_ILUVATAR, cuda);
23+
COMM_INIT_ALL(INFINI_DEVICE_HYGON, cuda);
2324
COMM_INIT_ALL(INFINI_DEVICE_ASCEND, ascend);
2425
COMM_INIT_ALL(INFINI_DEVICE_CAMBRICON, cambricon);
2526
COMM_INIT_ALL(INFINI_DEVICE_METAX, metax);
@@ -44,6 +45,7 @@ __C infiniStatus_t infinicclCommDestroy(infinicclComm_t comm) {
4445
switch (comm->device_type) {
4546
COMM_DESTROY(INFINI_DEVICE_NVIDIA, cuda);
4647
COMM_DESTROY(INFINI_DEVICE_ILUVATAR, cuda);
48+
COMM_DESTROY(INFINI_DEVICE_HYGON, cuda);
4749
COMM_DESTROY(INFINI_DEVICE_ASCEND, ascend);
4850
COMM_DESTROY(INFINI_DEVICE_CAMBRICON, cambricon);
4951
COMM_DESTROY(INFINI_DEVICE_METAX, metax);
@@ -75,6 +77,7 @@ __C infiniStatus_t infinicclAllReduce(
7577
switch (comm->device_type) {
7678
ALL_REDUCE(INFINI_DEVICE_NVIDIA, cuda);
7779
ALL_REDUCE(INFINI_DEVICE_ILUVATAR, cuda);
80+
ALL_REDUCE(INFINI_DEVICE_HYGON, cuda);
7881
ALL_REDUCE(INFINI_DEVICE_ASCEND, ascend);
7982
ALL_REDUCE(INFINI_DEVICE_CAMBRICON, cambricon);
8083
ALL_REDUCE(INFINI_DEVICE_METAX, metax);

src/infiniop-test/src/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void printUsage() {
2222
std::cout << " Path to the test gguf file" << std::endl
2323
<< std::endl;
2424
std::cout << " --<device>[:id]" << std::endl;
25-
std::cout << " (Optional) Specify the device type --(cpu|nvidia|cambricon|ascend|metax|moore|iluvatar|kunlun|sugon) and device ID (optional). CPU by default." << std::endl
25+
std::cout << " (Optional) Specify the device type --(cpu|nvidia|cambricon|ascend|metax|moore|iluvatar|kunlun|hygon) and device ID (optional). CPU by default." << std::endl
2626
<< std::endl;
2727
std::cout << " --warmup <warmups>" << std::endl;
2828
std::cout << " (Optional) Number of warmups to perform before timing. Default to 0." << std::endl
@@ -78,7 +78,7 @@ ParsedArgs parseArgs(int argc, char *argv[]) {
7878
PARSE_DEVICE("--moore", INFINI_DEVICE_MOORE)
7979
PARSE_DEVICE("--iluvatar", INFINI_DEVICE_ILUVATAR)
8080
PARSE_DEVICE("--kunlun", INFINI_DEVICE_KUNLUN)
81-
PARSE_DEVICE("--sugon", INFINI_DEVICE_SUGON)
81+
PARSE_DEVICE("--hygon", INFINI_DEVICE_HYGON)
8282
else if (arg == "--warmup" && i + 1 < argc) {
8383
args.warmups = std::stoi(argv[++i]);
8484
}

src/infiniop/devices/handle.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#ifdef ENABLE_CPU_API
66
#include "cpu/cpu_handle.h"
77
#endif
8-
#if defined(ENABLE_NVIDIA_API) || defined(ENABLE_ILUVATAR_API)
8+
#if defined(ENABLE_NVIDIA_API) || defined(ENABLE_ILUVATAR_API) || defined(ENABLE_HYGON_API)
99
#include "nvidia/nvidia_handle.h"
1010
#endif
1111
#ifdef ENABLE_CAMBRICON_API
@@ -62,6 +62,9 @@ __C infiniStatus_t infiniopCreateHandle(infiniopHandle_t *handle_ptr) {
6262
#ifdef ENABLE_METAX_API
6363
CREATE(INFINI_DEVICE_METAX, metax);
6464
#endif
65+
#ifdef ENABLE_HYGON_API
66+
CREATE(INFINI_DEVICE_HYGON, hygon);
67+
#endif
6568

6669
default:
6770
return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;
@@ -101,6 +104,9 @@ __C infiniStatus_t infiniopDestroyHandle(infiniopHandle_t handle) {
101104
#endif
102105
#ifdef ENABLE_METAX_API
103106
DELETE(INFINI_DEVICE_METAX, metax);
107+
#endif
108+
#ifdef ENABLE_HYGON_API
109+
DELETE(INFINI_DEVICE_HYGON, hygon);
104110
#endif
105111
default:
106112
return INFINI_STATUS_DEVICE_TYPE_NOT_SUPPORTED;

src/infiniop/devices/nvidia/nvidia_common.cu

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,16 @@ infiniStatus_t Handle::create(InfiniopHandle **handle_ptr, int device_id) {
104104

105105
} // namespace iluvatar
106106

107+
namespace hygon {
108+
109+
Handle::Handle(int device_id)
110+
: nvidia::Handle(INFINI_DEVICE_HYGON, device_id) {}
111+
112+
infiniStatus_t Handle::create(InfiniopHandle **handle_ptr, int device_id) {
113+
*handle_ptr = new Handle(device_id);
114+
return INFINI_STATUS_SUCCESS;
115+
}
116+
117+
} // namespace hygon
118+
107119
} // namespace device

src/infiniop/devices/nvidia/nvidia_handle.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ struct Handle : public nvidia::Handle {
3535

3636
} // namespace iluvatar
3737

38+
namespace hygon {
39+
40+
struct Handle : public nvidia::Handle {
41+
Handle(int device_id);
42+
43+
public:
44+
static infiniStatus_t create(InfiniopHandle **handle_ptr, int device_id);
45+
};
46+
47+
} // namespace hygon
48+
3849
} // namespace device
3950

4051
#endif // __INFINIOP_CUDA_HANDLE_H__

src/infiniop/devices/nvidia/nvidia_kernel_common.cuh

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
#ifdef ENABLE_SUGON_CUDA_API
2-
#define INFINIOP_CUDA_KERNEL __launch_bounds__(512) __global__ void
1+
#ifndef __INFINIOP_CUDA_KERNEL_COMMON_CUH__
2+
#define __INFINIOP_CUDA_KERNEL_COMMON_CUH__
3+
4+
#if defined(ENABLE_HYGON_API)
5+
#define INFINIOP_CUDA_KERNEL __launch_bounds__(1024) __global__ void
36
#else
47
#define INFINIOP_CUDA_KERNEL __global__ void
58
#endif
@@ -15,8 +18,14 @@
1518

1619
#define CHECK_CUDA(API) CHECK_INTERNAL(API, cudaSuccess)
1720

21+
#ifdef ENABLE_HYGON_API
22+
// Hygon DCU uses different bfloat16 type definitions
23+
using cuda_bfloat16 = __nv_bfloat16;
24+
using cuda_bfloat162 = __nv_bfloat162;
25+
#else
1826
using cuda_bfloat16 = nv_bfloat16;
1927
using cuda_bfloat162 = nv_bfloat162;
28+
#endif
2029

2130
namespace device::nvidia {
2231

@@ -41,7 +50,7 @@ exp_(const float val) {
4150
return expf(val);
4251
}
4352

44-
#ifndef ENABLE_ILUVATAR_API
53+
#if !defined(ENABLE_ILUVATAR_API) && !defined(ENABLE_HYGON_API)
4554
__forceinline__ __device__ long double
4655
exp_(const long double val) {
4756
return expl(val);
@@ -62,3 +71,5 @@ __forceinline__ __device__ __nv_bfloat16
6271
exp_(const __nv_bfloat16 x) {
6372
return hexp(x);
6473
}
74+
75+
#endif // __INFINIOP_CUDA_KERNEL_COMMON_CUH__

0 commit comments

Comments
 (0)