HcommLocalReduceOnThread【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持[!NOTE]说明 针对Atlas A2 训练系列产品/Atlas A2 推理系列产品仅支持Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。功能说明提供本地归约操作将src指向的长度为count*sizeof(dataType)的内存数据与dst所指向的相同长度的内存数据进行reduceOp操作并将结果输出到dst中。函数原型int32_t HcommLocalReduceOnThread(ThreadHandle thread, void *dst, const void *src, uint64_t count, HcommDataType dataType, HcommReduceOp reduceOp)参数说明参数名输入/输出描述thread输入通信线程句柄为通过HcclThreadAcquire接口获取到的threads。ThreadHandle类型的定义请参见ThreadHandle。dst输出目的地址Device内存。src输入源地址Device内存。count输入元素个数。dataType输入数据类型支持int8、int16、int32、float16、float32、bfp16。HcommDataType类型的定义请参见HcommDataType。reduceOp输入归约操作类型支持sum、max、min。HcommReduceOp类型的定义请参见HcommReduceOp。返回值int32_t接口成功返回0其他失败。约束说明dst、src内存需要为device内存。在 Ascend 950PR/Ascend 950DT 上仅支持 AICPU_TS 模式下、在 Device 侧调用该接口。调用示例HcclComm comm; CommEngine engine COMM_ENGINE_CPU_TS; aclrtStream stream; aclrtCreateStream(stream); ThreadHandle thread; HcclResult result HcclThreadAcquireWithStream(comm, engine, stream, 2, thread); // 申请device内存 uint64_t memSize 256; s32 policy static_castint(ACL_MEM_TYPE_HIGH_BAND_WIDTH) | static_castint(ACL_MEM_MALLOC_HUGE_FIRST); aclrtMallocAttrValue moduleIdValue; moduleIdValue.moduleId HCCL; aclrtMallocAttribute attrs{.attr ACL_RT_MEM_ATTR_MODULE_ID, .value moduleIdValue}; aclrtMallocConfig cfg{.attrs attrs, .numAttrs 1}; void* inputMem; void* outputMem; aclrtMallocWithCfg(inputMem, memSize, static_castaclrtMemMallocPolicy(policy), cfg); aclrtMallocWithCfg(outputMem, memSize, static_castaclrtMemMallocPolicy(policy), cfg); // 执行Device侧的Reduce操作 uint64_t count memSize / SIZE_TABLE[HCCL_DATA_TYPE_FP32]; HcommLocalReduceOnThread(thread, outputMem, inputMem, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM);在 Ascend 950PR/Ascend 950DT 上该函数需要编译到 Device 侧使用HcclComm comm; CommEngine engine COMM_ENGINE_AICPU_TS; void *cclBufferAddr nullptr; uint64_t cclBufferSize 0; HcclGetHcclBuffer(comm, cclBufferAddr, cclBufferSize); ThreadHandle thread; HcclThreadAcquire(comm, engine, 1, 1, thread); // 其余资源申请 // 拷贝参数并 Launch Kernel // Device 侧算法编排 uint64_t len 256; void *src param.userIn; void *dst param.cclBuf; uint64_t sizeOfFP32 4; uint64_t count len / sizeOfFP32; HcommLocalReduceOnThread(thread, dst, src, count, HCOMM_DATA_TYPE_FP32, HCOMM_REDUCE_SUM);【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN/HCOMM本地归约操作
HcommLocalReduceOnThread【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持[!NOTE]说明 针对Atlas A2 训练系列产品/Atlas A2 推理系列产品仅支持Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。功能说明提供本地归约操作将src指向的长度为count*sizeof(dataType)的内存数据与dst所指向的相同长度的内存数据进行reduceOp操作并将结果输出到dst中。函数原型int32_t HcommLocalReduceOnThread(ThreadHandle thread, void *dst, const void *src, uint64_t count, HcommDataType dataType, HcommReduceOp reduceOp)参数说明参数名输入/输出描述thread输入通信线程句柄为通过HcclThreadAcquire接口获取到的threads。ThreadHandle类型的定义请参见ThreadHandle。dst输出目的地址Device内存。src输入源地址Device内存。count输入元素个数。dataType输入数据类型支持int8、int16、int32、float16、float32、bfp16。HcommDataType类型的定义请参见HcommDataType。reduceOp输入归约操作类型支持sum、max、min。HcommReduceOp类型的定义请参见HcommReduceOp。返回值int32_t接口成功返回0其他失败。约束说明dst、src内存需要为device内存。在 Ascend 950PR/Ascend 950DT 上仅支持 AICPU_TS 模式下、在 Device 侧调用该接口。调用示例HcclComm comm; CommEngine engine COMM_ENGINE_CPU_TS; aclrtStream stream; aclrtCreateStream(stream); ThreadHandle thread; HcclResult result HcclThreadAcquireWithStream(comm, engine, stream, 2, thread); // 申请device内存 uint64_t memSize 256; s32 policy static_castint(ACL_MEM_TYPE_HIGH_BAND_WIDTH) | static_castint(ACL_MEM_MALLOC_HUGE_FIRST); aclrtMallocAttrValue moduleIdValue; moduleIdValue.moduleId HCCL; aclrtMallocAttribute attrs{.attr ACL_RT_MEM_ATTR_MODULE_ID, .value moduleIdValue}; aclrtMallocConfig cfg{.attrs attrs, .numAttrs 1}; void* inputMem; void* outputMem; aclrtMallocWithCfg(inputMem, memSize, static_castaclrtMemMallocPolicy(policy), cfg); aclrtMallocWithCfg(outputMem, memSize, static_castaclrtMemMallocPolicy(policy), cfg); // 执行Device侧的Reduce操作 uint64_t count memSize / SIZE_TABLE[HCCL_DATA_TYPE_FP32]; HcommLocalReduceOnThread(thread, outputMem, inputMem, count, HCCL_DATA_TYPE_FP32, HCCL_REDUCE_SUM);在 Ascend 950PR/Ascend 950DT 上该函数需要编译到 Device 侧使用HcclComm comm; CommEngine engine COMM_ENGINE_AICPU_TS; void *cclBufferAddr nullptr; uint64_t cclBufferSize 0; HcclGetHcclBuffer(comm, cclBufferAddr, cclBufferSize); ThreadHandle thread; HcclThreadAcquire(comm, engine, 1, 1, thread); // 其余资源申请 // 拷贝参数并 Launch Kernel // Device 侧算法编排 uint64_t len 256; void *src param.userIn; void *dst param.cclBuf; uint64_t sizeOfFP32 4; uint64_t count len / sizeOfFP32; HcommLocalReduceOnThread(thread, dst, src, count, HCOMM_DATA_TYPE_FP32, HCOMM_REDUCE_SUM);【免费下载链接】hcommHCOMMHuawei Communication是HCCL的通信基础库提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考