HcclReduce
产品支持情况
|
产品 |
是否支持 |
|---|---|
|
|
√ |
|
|
√ |
|
|
☓ |
|
|
☓ |
|
|
☓ |
|
|
√ |
功能说明
集合通信算子Reduce的操作接口,将所有rank的数据相加(或其他归约操作)后,再把结果发送到root节点的指定位置上。

函数原型
1
|
HcclResult HcclReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType dataType, HcclReduceOp op, uint32_t root, HcclComm comm, aclrtStream stream) |
参数说明
|
参数名 |
输入/输出 |
描述 |
|---|---|---|
|
sendBuf |
输入 |
源数据buffer地址。 |
|
recvBuf |
输出 |
目的数据buffer地址,集合通信结果输出至此buffer中。 |
|
count |
输入 |
参与reduce操作的数据个数,比如只有一个int32数据参与,则count=1。 |
|
dataType |
输入 |
reduce操作的数据类型,HcclDataType类型。 针对 针对 针对 |
|
op |
输入 |
reduce的操作类型,目前支持操作类型为sum、prod、max、min。
说明:
针对 针对 |
|
root |
输入 |
作为reduce root的rank id。 |
|
comm |
输入 |
集合通信操作所在的通信域。 |
|
stream |
输入 |
本rank所使用的stream。 |
返回值
HcclResult:接口成功返回HCCL_SUCCESS,其他失败。
约束说明
所有rank的count、dataType、op均应相同。
调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// 申请集合通信操作的 Device 内存 void *sendBuf = nullptr; void *recvBuf = nullptr; uint64_t count = 8; size_t mallocSize = count * sizeof(float); aclrtMalloc((void **)&sendBuf, mallocSize, ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc((void **)&recvBuf, mallocSize, ACL_MEM_MALLOC_HUGE_FIRST); // 初始化通信域 uint32_t rankSize = 8; HcclComm hcclComm; HcclCommInitRootInfo(rankSize, &rootInfo, deviceId, &hcclComm); // 创建任务流 aclrtStream stream; aclrtCreateStream(&stream); // 执行 Reduce,将所有 rank 对应位置的 sendBuf 相加后,再把结果发送到 root 节点的 recvBuf HcclReduce(sendBuf, recvBuf, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM, rootRank, hcclComm, stream); // 阻塞等待任务流中的集合通信任务执行完成 aclrtSynchronizeStream(stream); // 释放资源 aclrtFree(sendBuf); // 释放 Device 侧内存 aclrtFree(recvBuf); // 释放 Device 侧内存 aclrtDestroyStream(stream); // 销毁任务流 HcclCommDestroy(hcclComm); // 销毁通信域 |