Skip to content

Commit 1ca2359

Browse files
authored
Merge pull request #35 from mxCynic/main
docs:添加infiniRT和infiniCCL的文档
1 parent fa36777 commit 1ca2359

File tree

3 files changed

+295
-2
lines changed

3 files changed

+295
-2
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@
1414
- [`InfiniOP`]:统一算子库,提供各类基于张量的高性能算子计算功能。
1515
- [`InfiniCCL`]:统一集合通信库,提供常用的集合通信功能,包括点对点、广播、聚合等。
1616

17-
[`InfiniRT`]:/
17+
[`InfiniRT`]:/infinirt/README.md
1818
[`InfiniOP`]:/infiniop/README.md
19-
[`InfiniCCL`]:/
19+
[`InfiniCCL`]:/infiniccl/README.md

infiniccl/README.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
2+
# `infiniccl`统一集合通信库
3+
4+
## 简介
5+
6+
`InfiniCCL`:统一集合通信库,提供常用的集合通信功能,包括点对点、广播、聚合等。
7+
8+
## 编程接口
9+
#### 初始化通信组
10+
11+
``` c++
12+
infiniStatus_t infinicclCommInitAll(
13+
infiniDevice_t device_type,
14+
infinicclComm_t *comms,
15+
int ndevice,
16+
const int *device_ids);
17+
```
18+
19+
- device_type: 设备类型,枚举类型 infiniDevice_t,例如 INFINI_DEVICE_NVIDIA。
20+
- comms: 输出通信组句柄数组,长度为 ndevice。
21+
- ndevice: 设备数量。
22+
- device_ids: 设备 ID 数组,长度为 ndevice,每个 ID 对应 device_type 类型下的一个设备。
23+
- 说明:为指定设备类型的若干设备创建通信上下文,用于后续 AllReduce 等 collective 操作。每个设备对应一个通信句柄。
24+
25+
#### 销毁通信组
26+
27+
``` c++
28+
infiniStatus_t infinicclCommDestroy(infinicclComm_t comm);
29+
```
30+
31+
- comm: 需要销毁的通信组句柄。
32+
- 说明:释放通过 infinicclCommInitAll 创建的通信资源。
33+
34+
#### AllReduce 操作
35+
36+
``` c++
37+
infiniStatus_t infinicclAllReduce(
38+
void *sendbuf,
39+
void *recvbuf,
40+
size_t count,
41+
infiniDtype_t datatype,
42+
infinicclReduceOp_t op,
43+
infinicclComm_t comm,
44+
infinirtStream_t stream);
45+
```
46+
47+
- sendbuf: 输入缓冲区,存放需要参与 AllReduce 的本地数据。
48+
- recvbuf: 输出缓冲区,存放归约后的结果数据。
49+
- count: 元素个数(而不是字节数)。
50+
- datatype: [枚举类型infiniDtype_t](/common/dtype/README.md)。
51+
- op: 归约操作类型,枚举类型 infinicclReduceOp_t。
52+
其定义如下:
53+
```
54+
typedef enum {
55+
INFINICCL_SUM = 0,
56+
INFINICCL_PROD = 1,
57+
INFINICCL_MAX = 2,
58+
INFINICCL_MIN = 3,
59+
INFINICCL_AVG = 4,
60+
} infinicclReduceOp_t;
61+
```
62+
- comm: 通信组句柄。
63+
- stream: 指定操作执行在哪个 infinirtStream_t 流上。
64+
- 说明:在通信组内所有设备上执行 AllReduce 操作。各设备的 recvbuf 将接收到相同的归约结果。

infinirt/README.md

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,229 @@
1+
2+
# `InfiniRT` 统一运行时库
3+
4+
## 简介
5+
6+
*InfiniRT* 是一个跨平台统一运行时库,对不同芯片平台的运行时和驱动功能进行了统一封装。
7+
8+
## 编程接口
9+
10+
### 1. 设备管理
11+
12+
#### 初始化设备环境
13+
14+
``` c++
15+
infiniStatus_t infinirtInit();
16+
```
17+
18+
- 初始化所有可用设备类型的运行时环境(如启用的 Ascend)。
19+
- 仅在使用前调用一次。
20+
#### 获得设备所有设备数量
21+
22+
``` c++
23+
infiniStatus_t infinirtGetAllDeviceCount(int *count_array);
24+
```
25+
26+
- `count_array`: 数组长度至少为 [`infiniDevice_t`] 中设备种类数量,每种设备数量会写入数组的相应位置。
27+
28+
#### 获取当前设备信息
29+
30+
``` c++
31+
infiniStatus_t infinirtGetDevice(infiniDevice_t *device_ptr, int *device_id_ptr);
32+
```
33+
34+
- device_ptr: 返回当前设备类型(可为 nullptr)。
35+
36+
- device_id_ptr: 返回当前设备 ID(可为 nullptr)。
37+
#### 获得特定设备数量
38+
39+
``` c++
40+
infiniStatus_t infinirtGetDeviceCount(infiniDevice_t device, int *count);
41+
```
42+
43+
- `device`: 设备种类。
44+
- `count`: 存储设备数量查询结果的指针。
45+
46+
#### 设置当前使用的设备
47+
48+
``` c++
49+
infiniStatus_t infinirtSetDevice(infiniDevice_t device, int device_id);
50+
```
51+
52+
- device: 要设置的设备类型。
53+
- device_id: 要设置的设备 ID。
54+
55+
#### 同步当前设备
56+
57+
``` c++
58+
infiniStatus_t infinirtDeviceSynchronize();
59+
```
60+
61+
- 阻塞直到当前设备完成所有计算。
62+
63+
### 2. 流管理
64+
65+
#### 创建设备流(Stream)
66+
67+
``` c++
68+
infiniStatus_t infinirtStreamCreate(infinirtStream_t *stream_ptr);
69+
```
70+
71+
- stream_ptr: 返回创建的 stream 对象。
72+
73+
#### 销毁设备流
74+
75+
``` c++
76+
infiniStatus_t infinirtStreamDestroy(infinirtStream_t stream);
77+
```
78+
79+
- stream: 需要销毁的 stream 对象。
80+
81+
#### 等待流中所有任务完成
82+
83+
``` c++
84+
infiniStatus_t infinirtStreamSynchronize(infinirtStream_t stream);
85+
```
86+
87+
- stream: 需要同步的 stream。
88+
89+
#### 让一个流等待一个事件
90+
91+
``` c++
92+
infiniStatus_t infinirtStreamWaitEvent(infinirtStream_t stream, infinirtEvent_t event);
93+
```
94+
95+
- stream: 需要等待的流。
96+
- event: 被等待的事件。
97+
98+
### 3. 事件管理
99+
#### 创建事件
100+
101+
``` c++
102+
infiniStatus_t infinirtEventCreate(infinirtEvent_t *event_ptr);
103+
```
104+
105+
- event_ptr: 返回创建的事件。
106+
107+
#### 记录事件
108+
109+
``` c++
110+
infiniStatus_t infinirtEventRecord(infinirtEvent_t event, infinirtStream_t stream);
111+
```
112+
113+
- event: 要记录的事件。
114+
- stream: 事件记录在哪个流上。
115+
116+
#### 查询事件状态
117+
118+
``` c++
119+
infiniStatus_t infinirtEventQuery(infinirtEvent_t event, infinirtEventStatus_t *status_ptr);
120+
```
121+
122+
- event: 需要查询的事件。
123+
- status_ptr: 返回事件状态(已完成 / 未完成等)。
124+
125+
#### 等待事件完成
126+
127+
``` c++
128+
infiniStatus_t infinirtEventSynchronize(infinirtEvent_t event);
129+
```
130+
131+
- event: 要等待的事件。
132+
133+
#### 销毁事件
134+
135+
``` c++
136+
infiniStatus_t infinirtEventDestroy(infinirtEvent_t event);
137+
```
138+
139+
- event: 需要销毁的事件。
140+
141+
### 4. 内存管理
142+
143+
#### 分配设备内存
144+
``` c++
145+
infiniStatus_t infinirtMalloc(void **p_ptr, size_t size);
146+
```
147+
148+
- p_ptr: 返回分配的内存指针。
149+
- size: 要分配的内存大小(单位:字节)。
150+
151+
#### 分配页锁定主机内存
152+
153+
``` c++
154+
infiniStatus_t infinirtMallocHost(void **p_ptr, size_t size);
155+
```
156+
157+
- p_ptr: 返回分配的主机内存指针。
158+
159+
- size: 分配的内存大小(单位:字节)。
160+
161+
#### 释放设备内存
162+
163+
``` c++
164+
infiniStatus_t infinirtFree(void *ptr);
165+
```
166+
167+
- ptr: 需要释放的设备内存指针。
168+
169+
#### 释放页锁定主机内存
170+
171+
``` c++
172+
infiniStatus_t infinirtFreeHost(void *ptr);
173+
```
174+
175+
ptr: 需要释放的主机内存指针。
176+
177+
#### 同步内存拷贝
178+
179+
``` c++
180+
infiniStatus_t infinirtMemcpy(void *dst, const void *src, size_t size, infinirtMemcpyKind_t kind);
181+
```
182+
183+
- dst: 目标地址。
184+
- src: 源地址。
185+
- size: 拷贝的字节数。
186+
- kind: 枚举类型infinirtMemcpyKind_t
187+
其定义如下:
188+
``` c++
189+
typedef enum {
190+
INFINIRT_MEMCPY_H2H = 0, //Host to Host
191+
INFINIRT_MEMCPY_H2D = 1, //Host to Device
192+
INFINIRT_MEMCPY_D2H = 2, //Device to Host
193+
INFINIRT_MEMCPY_D2D = 3, //Device to Device
194+
} infinirtMemcpyKind_t;
195+
196+
```
197+
198+
#### 异步内存拷贝
199+
200+
``` c++
201+
infiniStatus_t infinirtMemcpyAsync(void *dst, const void *src, size_t size, infinirtMemcpyKind_t kind, infinirtStream_t stream);
202+
```
203+
204+
- dst: 目标地址。
205+
- src: 源地址。
206+
- size: 拷贝的字节数。
207+
- kind: 拷贝类型(见[infinirtMemcpy](#同步内存拷贝))。
208+
- stream: 所用的异步流。
209+
210+
#### 异步分配设备内存 (Stream-ordered memory)
211+
212+
``` c++
213+
infiniStatus_t infinirtMallocAsync(void **p_ptr, size_t size, infinirtStream_t stream);
214+
```
215+
216+
- p_ptr: 返回分配的内存指针。
217+
218+
- size: 分配大小(单位:字节)。
219+
220+
- stream: 异步操作所用的流。
221+
222+
#### 异步释放设备内存 (Stream-ordered memory)
223+
224+
``` c++
225+
infiniStatus_t infinirtFreeAsync(void *ptr, infinirtStream_t stream);
226+
```
227+
228+
- ptr: 要释放的设备内存地址。
229+
- stream: 异步释放所用的流。

0 commit comments

Comments
 (0)