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

CANN内存屏障同步控制函数文档

asc_mem_bar

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

产品支持情况

产品是否支持
Ascend 950PR/Ascend 950DT

功能说明

头文件路径:"c_api/reg_compute/reg_vector.h"

Reg计算宏函数内不同流水线之间的同步指令。该同步指令指定源流水线和目的流水线,如下图所示,目的流水线将等待源流水线上所有指令完成才进行执行。 读写场景下,当读指令使用的寄存器和写指令使用的寄存器相同时,可以触发寄存器保序,指令将会按照代码顺序执行,不需要插入同步指令,而当使用的寄存器不同时,如果要确保读写指令执行,则需要插入同步指令。写写场景同理。

函数原型

__simd_callee__ inline void asc_mem_bar(MEM_TYPE mem_type)

参数说明

表1参数说明 | 参数名 | 输入/输出 | 描述 | | :----- | :------- | :------- | | mem_type | 输入 | 同步流水线的类型,类型为MEM_TYPE,取值范围见表2 mem_type取值说明。 |

表2 mem_type取值说明(源流水线/目的流水线表示的含义见表3 Reg计算流水线说明) | 值 | 源流水线 | 目的流水线 | | ------ | -------- | -------- | | VV_ALL | VEC_ALL | VEC_ALL | | VST_VLD | VEC_STORE | VEC_LOAD | | VLD_VST | VEC_LOAD | VEC_STORE | | VST_VST | VEC_STORE | VEC_STORE | | VS_ALL | VEC_ALL | SCALAR_ALL | | VST_LD | VEC_STORE | SCALAR_LOAD | | VLD_ST | VEC_LOAD | SCALAR_STORE | | VST_ST | VEC_STORE | SCALAR_STORE | | SV_ALL | SCALAR_ALL | VEC_ALL | | ST_VLD | SCALAR_STORE | VEC_LOAD | | LD_VST | SCALAR_LOAD | VEC_STORE | | ST_VST | SCALAR_STORE | VEC_STORE | | SS_ALL | SCALAR_ALL | SCALAR_ALL | | ST_LD | SCALAR_STORE | SCALAR_LOAD | | LD_ST | SCALAR_LOAD | SCALAR_STORE | | ST_ST | SCALAR_STORE | SCALAR_STORE |

表3 Reg计算流水线说明 | 流水线 | 含义 | | ------ | -------- | | VEC_STORE | SIMD_VF函数内矢量写UB流水线。
对应寄存器到UB的搬运指令,例如asc_store。 | | VEC_LOAD | SIMD_VF函数内矢量读UB流水线。
对应UB到寄存器的搬运指令,例如asc_load。 | | SCALAR_STORE | SIMD_VF函数内标量写UB流水线。
对应标量写入UB的指令,例如asc_duplicate_scalar。 | | SCALAR_LOAD | SIMD_VF函数内标量读UB流水线。
对应UB读取标量的指令。 | | VEC_ALL | SIMD_VF函数内所有矢量读写UB流水线。 | | SCALAR_ALL | SIMD_VF函数内所有标量读写UB流水线。 |

返回值说明

流水类型

PIPE_S

约束说明

调用示例

如下示例中,for循环中后一次循环中读UB矢量搬运,和前一次循环中写UB矢量搬运,操作了同一块UB地址空间。因此后一次循环中读UB矢量搬运需要等待前一次循环中写UB矢量搬运执行完成后才能执行,需要插入VEC_LOAD等待VEC_STORE的同步VST_VLD。

// ub_addr是外部输入的UB内存空间地址 __ubuf__ half* ub_addr; vector_half dst; vector_half src0; vector_half src1; vector_bool mask; mask = asc_create_mask_b16(PAT_ALL); uint16_t repeatTime = 8; uint16_t repeatSize = 64; for (uint16_t i = 1; i < repeatTime; i++) { asc_mem_bar(VST_VLD); asc_loadalign(src0, ub_addr); asc_loadalign(src1, ub_addr + i * repeatSize); asc_add(dst, src0, src1, mask); asc_storealign(ub_addr, dst, mask); }

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

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

http://www.cnnetsun.cn/news/3392915.html

相关文章:

  • 5分钟快速上手OpenSpeedy:免费游戏加速工具的完整指南
  • Nof1-tracker 核心功能详解:7大AI Agent跟单策略全解析
  • Swindler高级技巧:异步操作与并发窗口管理最佳实践
  • Jido WebAssembly:探索在浏览器中运行自主代理的可能性
  • Claude Mythos:可操作漏洞发现与利用闭环的AI安全新范式
  • C++高性能计时器实现:支持暂停恢复与断点分析
  • Grok4双模态交互设计原理与工业落地实践
  • 3个步骤解锁QQ音乐加密文件:qmcdump如何让你的音频重获自由?
  • 【Linux】从内核日志到硬件排查:根治“NIC Link is Down”的进阶指南
  • STM32外部中断EXTI:从原理到实战,解锁嵌入式实时响应新姿势
  • NiceFish权限控制:RBAC权限模型在前端后端的完整实现
  • Python与R混合编程:数据科学全链路协同实战指南
  • 开始深度学习
  • MSP430FR247x引脚复用与低功耗设计实战解析
  • 工业级推荐系统实战:从召回到重排的全链路穿透
  • 从0到1开发个性化圆形菜单:FanMenu源代码深度剖析与二次开发指南
  • 如何为 wd 编写自动化测试:保证插件稳定性的最佳实践
  • DRA75P/DRA74P McASP虚拟IO模式配置与高速时序设计实战
  • HCCL_VM单元测试脚本
  • CANN/asc-devkit SIMD向量减法API文档
  • 计算机网络物理层核心概念与典型习题精讲(附详细解析)
  • ngx-ui主题与样式定制:快速创建品牌化UI界面的终极指南
  • 从理论到实践:基于LabVIEW与USRP的无线通信系统核心模块构建指南
  • Agent 每次调用工具都要问用户吗?Janus 揭示权限管理的三难困境
  • 提升用户体验:UITextField-Shake在表单验证中的最佳实践 [特殊字符]
  • Python ctypes调用C DLL实战:从基础到高级应用
  • OpenVINO版本升级指南:从旧版本迁移到2024.3.0在openEuler上的注意事项
  • 【限时解密】ChatGPT竞品技术底牌:MoE架构差异、上下文窗口压缩算法、推理加速芯片兼容性——一线厂商CTO亲授3个未公开参数
  • 终极Blender 3MF插件指南:如何完美解决3D打印格式兼容性问题
  • MMPlayerView:打造如YouTube般流畅的自定义AVPlayerLayer视频播放体验