news 2026/5/9 14:27:07

华为CANN/hcomm算子下发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为CANN/hcomm算子下发

算子下发

【免费下载链接】hcommHCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm

开发者完成通信算子任务编排后,需要将Kernel函数下发给具体的通信引擎执行。

对于AI CPU通信引擎,开发者需首先声明算子信息库文件,文件格式为json,文件内容如下:

{ "CustomAicpuKernel": { "opInfo": { "opKernelLib": "AICPUKernel", // 固定值 "kernelSo": "<aicpu_kernel_so_name>", // AI CPU侧动态链接库,用户自定义,如:libp2p_aicpu_kernel.so "functionName": "<aicpu_kernel_func_name>" // AI CPU Kernel函数名字,用户自定义,如:HcclLaunchP2PAicpuKernel } } }

定义AI CPU Kernel函数,格式如下。其中<aicpu_kernel_func_name>为AI CPU Kernel函数名字,函数名必须与算子信息库文件(json文件)中的functionName字段保持一致。

extern "C" unsigned int <aicpu_kernel_func_name>(void *param) { // Kernel 实现 }

代码示例

以自定义Send/Receive算子为例,使用AI CPU通信引擎时,Host侧下发AI CPU Kernel函数的代码片段如下:

// Host stream通知Device主thread aclrtRecordNotify(g_notifies[0], stream); std::string kernelName = "HcclLaunchP2PAicpuKernel"; aclrtFuncHandle funcHandle; aclrtArgsHandle argsHandle; ACLCHECK(aclrtBinaryGetFunction(g_binKernelHandle, kernelName.c_str(), &funcHandle)); ACLCHECK(aclrtKernelArgsInit(funcHandle, &argsHandle)); aclrtParamHandle paraHandle; aclrtKernelArgsAppend(argsHandle, &param, sizeof(OpParam), &paraHandle); aclrtKernelArgsFinalize(argsHandle); uint16_t NOTIFY_DEFAULT_WAIT_TIME = 27 * 68; aclrtLaunchKernelCfg cfg; aclrtLaunchKernelAttr attr; attr.id = ACL_RT_LAUNCH_KERNEL_ATTR_TIMEOUT; attr.value.timeout = NOTIFY_DEFAULT_WAIT_TIME; cfg.numAttrs = 1; cfg.attrs = &attr; constexpr uint32_t blockDim = 1; // 执行device侧的算法编排 aclrtLaunchKernelWithConfig(funcHandle, blockDim, stream, &cfg, argsHandle, nullptr); // Host stream等待Device的通知 aclrtWaitAndResetNotify(g_notifies[1], stream, CUSTOM_TIMEOUT);

在AI CPU侧需要定义Kernel函数入口,该函数需编译到Device侧:

typedef struct { void *addr; uint64_t size; } CommBuffer; struct AlgResourceCtx { ThreadHandle threadHandle; // 通信线程句柄 CommBuffer localBuffer; // 本端通信内存 CommBuffer remoteBuffer; // 远端通信内存 ChannelHandle channelHandle; // 通信通道资源 uint32_t notifyIds[AICPU_CONTROL_NOTIFY_NUM]; // aicpu模式下device侧控制notify }; struct OpParam { char tag[TAG_LENGTH]; char commName[COMM_INDENTIFIER_MAX_LENGTH]; // 通信域名称 void* inputPtr = nullptr; // 算子输入数据地址 void* outputPtr = nullptr; // 算子输出数据地址 uint64_t count = 0; // 算子数据量 HcclDataType dataType = HCCL_DATA_TYPE_RESERVED; // 算子数据类型 HcclCMDType opType = HcclCMDType::HCCL_CMD_INVALID; // 算子类型 AlgResourceCtx* resCtx = nullptr; // 资源上下文 }; // 在AI CPU上执行的Kernel函数 extern "C" unsigned int HcclLaunchP2PAicpuKernel(OpParam *param) { HCCL_INFO("Entry-%s, commName[%s], tag[%s]", __func__, param->commName, param->tag); if (HcommAcquireComm(param->commName) != HCCL_SUCCESS) { HCCL_ERROR("%s HcommAcquireComm fail, commName[%s]", __func__, param->commName); return 1; } // 获取Device侧主thread ThreadHandle thread = param->resCtx->threadHandle; if (HcommBatchModeStart(param->tag) != HCCL_SUCCESS) { HCCL_ERROR("failed start batch mode"); return 1; } // 主thread等待Host stream的通知 if (HcommAclrtNotifyWaitOnThread(thread, param->resCtx->notifyIds[0], CUSTOM_TIMEOUT) != HCCL_SUCCESS) { HCCL_ERROR("failed to wait notify[%d] from host main stream", param->resCtx->notifyIds[0]); return 1; } // 执行任务编排 if (ExecOp(*param, param->resCtx) != HCCL_SUCCESS) { HCCL_ERROR("orchestrate failed for op:%d", param->opType); return 1; } // 主thread通知Host stream if (HcommAclrtNotifyRecordOnThread(thread, param->resCtx->notifyIds[1]) != HCCL_SUCCESS) { HCCL_ERROR("failed to record host main stream"); return 1; } if (HcommBatchModeEnd(param->tag) != HCCL_SUCCESS) { HCCL_ERROR("failed end batch mode"); return 1; } if (HcommReleaseComm(param->commName) != HCCL_SUCCESS) { HCCL_ERROR("%s HcommReleaseComm fail, commName[%s]", __func__, param->commName); return 1; } HCCL_INFO("%s success, commName[%s], tag[%s]", __func__, param->commName, param->tag); return 0; }

【免费下载链接】hcommHCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 14:26:29

ATB自注意力C++示例

加速库SelfAttentionOperation C Demo 【免费下载链接】ascend-transformer-boost 本项目是CANN提供的是一款高效、可靠的Transformer加速库&#xff0c;基于华为Ascend AI处理器&#xff0c;提供Transformer定制化场景的高性能融合算子。 项目地址: https://gitcode.com/can…

作者头像 李华
网站建设 2026/5/9 14:25:56

CANN驱动获取设备逻辑ID

dcmi_get_device_logic_id 【免费下载链接】driver 本项目是CANN提供的驱动模块&#xff0c;实现基础驱动和资源管理及调度等功能&#xff0c;使能昇腾芯片。 项目地址: https://gitcode.com/cann/driver 函数原型 int dcmi_get_device_logic_id(int *device_logic_id,…

作者头像 李华
网站建设 2026/5/9 14:23:03

CANN/pto-isa内存操作(GM <-> Tile)

Memory (GM <-> Tile) 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations a…

作者头像 李华
网站建设 2026/5/9 14:21:38

探索率如何驱动多智能体Q学习中的自发合作行为

1. 项目概述&#xff1a;当AI学会“社交”&#xff0c;探索与合作的微妙平衡最近在复现一个多智能体强化学习的实验时&#xff0c;我遇到了一个非常有趣的现象&#xff1a;几个原本各自为战、只追求自身奖励最大化的AI智能体&#xff0c;在没有任何显式通信或中央协调的情况下&…

作者头像 李华
网站建设 2026/5/9 14:20:41

CANN/metadef动态算子自动映射

AutoMappingByOpFnDynamic 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 动态输入/输出算子的自动映射回调函数。 函数原型 Status AutoMappingByOpFnDynamic(const ge::Operator &op_src, ge::Ope…

作者头像 李华
网站建设 2026/5/9 14:19:33

无监督模型评估新范式:可靠性-完整性曲线与AURCC指标详解

1. 项目概述&#xff1a;当模型评估遇上“无米之炊”在机器学习项目的落地过程中&#xff0c;我们总会遇到一个经典的“鸡生蛋还是蛋生鸡”的困境&#xff1a;要评估一个模型的性能好坏&#xff0c;你需要有高质量的标注数据&#xff1b;但很多时候&#xff0c;获取这些标注数据…

作者头像 李华