当前位置: 首页 > news >正文

CANN/asc-devkit核间同步IBSetAPI

IBSet

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
  • Atlas 200I/500 A2 推理产品:不支持
  • Atlas 推理系列产品AI Core:支持
  • Atlas 推理系列产品Vector Core:不支持
  • Atlas 训练系列产品:支持

功能说明

头文件路径为:"basic_api/kernel_operator_block_sync_intf.h"

当不同核之间操作同一块全局内存且可能存在读后写、写后读以及写后写等数据依赖问题时,通过调用该函数来插入同步语句来避免上述数据依赖时可能出现的数据读写错误问题。

调用IBSet设置某一个核的标志位,与IBWait成对使用,表示核之间的同步等待指令:被等待核中调用IBSet,通过将值1写入全局内存中某块地址来通知等待核;而等待核中调用IBWait,持续读取全局内存中相应地址块的值,直到其值变为1,从而实现核间同步。

函数原型

template <bool isAIVOnly = true> __aicore__ inline void IBSet(const GlobalTensor<int32_t>& gmWorkspace, const LocalTensor<int32_t>& ubWorkspace, int32_t blockIdx, int32_t eventID)

参数说明

表1模板参数说明

参数名描述
isAIVOnly控制是否为AIVOnly模式,默认为true。

表2接口参数说明

参数名输入/输出描述
gmWorkspace输入外部存储核状态的公共缓存,类型为GlobalTensor。GlobalTensor数据结构的定义请参考GlobalTensor。
ubWorkspace输入存储当前核状态的公共缓存。
类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。
blockIdx输入表示等待核的idx号,取值范围:[0,核数-1]。
eventID输入用来控制当前核的set、wait事件。

返回值说明

约束说明

  • gmWorkspace申请的空间最少要求为:核数32ByteseventID_max+blockIdx_max*32Bytes+32Bytes(eventID_max和blockIdx_max分别指eventID、blockIdx的最大值)。需要注意的是,如果是AIVOnly模式,核数=GetBlockNum();如果是MIX模式,核数=GetBlockNum()*2。
  • ubWorkspace申请的空间最少要求为:32Bytes。
  • 使用该接口进行多核控制时,算子调用时指定的逻辑AI Core核数numBlocks必须保证不大于实际运行该算子的AI处理器核数,否则框架进行多轮调度时会插入异常同步,导致Kernel“卡死”现象。
  • IBSet和IBWait配对使用时,除了ubWorkspace其余所有参数都必须相同,否则程序会在IBWait处卡死。
  • 分离模式下,使用该接口进行两个核间的同步时,仅对AIV核生效。
  • IBSet接口的gmWorkspace缓存的值需要初始化为0。

调用示例

本示例实现功能为使用2个核进行数据处理,每个核均是处理256个half类型数据。核0实现x+y的操作,并将结果放入z的前半部分,核1将核0的计算结果放入x,之后与y相加,结果存入z的后半部分,因此多个核之间需要进行数据同步。

// sync_gm为外部存储核状态的公共缓存,类型为GlobalTensor;sync_buf为存储当前核状态的公共缓存,类型为LocalTensor。 int32_t blockIdx = AscendC::GetBlockIdx(); // 获取当前核。 if (blockIdx == 1) { // 在核1设置IBWait,将阻塞指令执行直到核0操作完成。 AscendC::IBWait(sync_gm, sync_buf, 0, 0); } ... if (blockIdx == 0) { // 在核0设置IBSet,当核0的操作完成后再执行核1的指令。 AscendC::IBSet(sync_gm, sync_buf, 0, 0); }

完整样例请参考IBSet与IBWait核间同步样例。

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

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

http://www.jsqmd.com/news/1201071/

相关文章:

  • Winhance中文版终极指南:如何用免费开源工具彻底改造你的Windows体验
  • FanControl实战指南:3步攻克华硕主板传感器识别难题的高效方案
  • 遥感数字图像处理(实践篇)——基于ENVI的影像真彩色合成与交互式直方图拉伸技术解析
  • 专业数智中医赋能慢病管理,匠心服务护航全周期健康
  • 永磁同步电机(PMSM)知识系列之坐标变换:从物理图像到数学推导的完整解析
  • Proteus 9.0安装全指南:系统依赖、汉化授权与MCU元件库配置
  • 如何快速掌握Mi-Create:小米手表表盘设计的完整实践指南
  • WWMI-Package终极指南:零基础打造专属《鸣潮》游戏体验
  • BurpSuite专业版安装与多平台启动方案
  • Madmin完整安装教程:从零开始构建企业级Rails管理界面
  • Claude Code桌面端:本地化AI编程工作流的物理层重构
  • C++股票软件开发全解析:从架构设计到回测实现
  • C++ 矩阵类模板进阶:从基础转置到静态工厂方法
  • my-neuro高级配置技巧:提升性能与优化资源占用指南
  • 如何快速实现米哈游游戏自动登录:终极扫码工具指南
  • GPT-5.5免费体验指南:从API接入到智能代码助手实战
  • 终极指南:如何免费获取Axure中文语言包实现界面汉化
  • ComfyUI-SixGod_Prompt动态随机提示词:让AI绘画创作充满无限可能
  • 收藏!前端小白/程序员必看:2026年AI大模型岗位进阶指南,薪资高40%+!
  • Three.js 发散飞线教程
  • PCB设计大赛备赛指南:高速信号与HDI设计实战
  • 3个步骤让日文游戏告别乱码:Locale-Emulator新手完全指南
  • 一键拯救模糊照片!Upscayl:你的免费AI图像放大神器
  • Claude AI:团队协作场景下的智能助手实践指南
  • 2026重庆包包回收测评!爱马仕LV靠谱门店排名及避坑攻略 - 名奢变现站
  • 基于矢量绘图引擎的跨平台岛屿网格化规划技术方案
  • Dropify版本迁移指南:从旧版本升级到最新版本的无缝迁移
  • [4G5G专题-125] 5G信令实战篇-NSA与SA混合组网下的关键流程解析
  • 从旧版到Reborn:HiddenEye工具的进化之路与技术革新
  • 收藏!6个月小白/程序员变身大模型应用型AI工程师的进阶路线图