HcommWriteReduceWithNotifyOnThread
产品支持情况
产品 |
是否支持 |
|---|---|
Atlas 350 加速卡 |
√ |
☓ |
|
☓ |
|
☓ |
|
☓ |
|
☓ |
功能说明
向channel上的指定内存写数据,将src中长度为count*sizeof(dataType)的内存数据,与dst所指向的相同长度的内存数据进行reduceOp操作,并将结果输出到dst中,并向dst所在节点发送同步信号。接口调用方为src所在节点,该接口为异步接口。
函数原型
int32_t HcommWriteReduceWithNotifyOnThread(ThreadHandle thread, ChannelHandle channel, void *dst, const void *src, uint64_t count, HcommDataType dataType, HcommReduceOp reduceOp, uint32_t remoteNotifyIdx)
参数说明
参数名 |
输入/输出 |
描述 |
|---|---|---|
thread |
输入 |
通信线程句柄,为通过HcclThreadAcquire接口获取到的threads。 ThreadHandle类型的定义可参见ThreadHandle。 |
channel |
输入 |
通信通道句柄,为通过HcclChannelAcquire接口获取到的channels。 ChannelHandle类型的定义可参见ChannelHandle。 |
dst |
输出 |
目的内存地址,使用3.2.1-HcclGetHcclBuffer、3.2.6-HcclChannelGetHcclBuffer获取到的内存。 |
src |
输入 |
源内存地址,使用3.2.1-HcclGetHcclBuffer、3.2.6-HcclChannelGetHcclBuffer获取到的内存。 |
count |
输入 |
元素个数。 |
dataType |
输入 |
数据类型。 HcommDataType类型的定义请参见HcommDataType。 针对Atlas 350 加速卡,支持的数据类型:int8、int16、int32、uint8、uint16、uint32、float16、float32、bfp16。 |
reduceOp |
输入 |
归约操作类型。 HcommReduceOp类型的定义请参见HcommReduceOp。 针对Atlas 350 加速卡,支持归约类型:sum、max、min。 |
remoteNotifyIdx |
输入 |
通信通道另一端的Notify索引。 取值范围:[0, HcclChannelAcquire接口传入的channelDescs参数中的notifyNum)。 |
返回值
int32_t:接口成功返回0,其他失败。
调用示例
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | // 申请通信线程资源 CommEngine engine = CommEngine::COMM_ENGINE_AICPU_TS; uint32_t threadNum = 1; uint32_t notifyNumPerThread = 1; ThreadHandle thread; HcclThreadAcquire(engine, threadNum, notifyNumPerThread, &thread); // 申请通信通道资源 uint32_t channelNum = 1; HcclChannelDesc channelDesc; HcclChannelDescInit(&channelDesc, channelNum); HcclComm comm; ChannelHandle channel; HcclChannelAcquire(comm, engine, &channelDesc, channelNum, &channel); // 获取本端通信内存信息 void * localBuffer; uint64_t localBufferSize; HcclGetHcclBuffer(comm, &localBuffer, &localBufferSize); // 获取对端通信内存信息 void * remoteBuffer; uint64_t remoteBufferSize; HcclChannelGetHcclBuffer(comm, channel, &remoteBuffer, &remoteBufferSize); // 拷贝参数并 Launch Kernel // Device 侧算法编排 uint64_t len = std::min(localBufferSize, remoteBufferSize); uint64_t sizeOfFP32 = 4; uint64_t count = len / sizeOfFP32; // 将本端内存的内容写到对端内存上并通知对端 uint32_t rmtNotifyIdx = 0; HcommWriteReduceWithNotifyOnThread(thread, channel, remoteBuffer, localBuffer, count, HCOMM_DATA_TYPE_FP32, HCOMM_REDUCE_SUM, rmtNotifyIdx); // 数据面操作 // ... // 等待对端通知本端 uint32_t lclNotifyIdx = 0; uint32_t notifyTimeout = 0; HcommChannelNotifyWaitOnThread(thread, channel, lclNotifyIdx, notifyTimeout); |