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

CANN/asc-devkit reg数据类型定义

reg数据类型定义

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

矢量数据寄存器

矢量数据寄存器用于存储矢量数据,其位宽为VL(Vector Length),可存储VL/sizeof(T)的数据(T表示数据类型)。在Ascend 950PR/Ascend 950DT版本中, VL = 256B。例如对于矢量数据类型vector_float,该寄存器可存储的元素数量为256B / sizeof(float) = 64个。

以下是以位宽为分类,列举的所有矢量数据寄存器的数据类型:

位宽矢量数据类型
b8vector_int8_t/vector_uint8_t/vector_int4x2_t/vector_fp4x2_e2m1_t/vector_fp4x2_e1m2_t/vector_hifloat8_t/vector_fp8_e4m3fn_t/vector_fp8_e5m2_t/vector_fp8_e8m0_t
b16vector_int16_t/vector_uint16_t/vector_half/vector_bfloat16_t
b32vector_int32_t/vector_uint32_t/vector_float
b64vector_int64_t/vector_uint64_t

注意:vector_int4x2_t、vector_fp4x2_e2m1_t、vector_fp4x2_e1m2_t这三个矢量数据类型在内存中的排布需要将两个元素打包为一个字节的存储单元。

调用示例

vector_half dst; half index = 0; asc_arange(dst, index);

掩码寄存器

掩码寄存器的数据类型为vector_bool,用于矢量计算中选择参与计算的元素,其位宽为VL/8。

调用示例

uint32_t length = 255; vector_bool mask = asc_create_mask_b16(PAT_ALL); // 创建一个所有元素为True的掩码寄存器 vector_bool mask = asc_update_mask_b16(length); // 根据矢量计算需要操作的元素的具体数量,生成对应的掩码寄存器

非对齐寄存器

非对齐寄存器包括vector_load_unalign和vector_store_unalign。这些寄存器作为缓冲区,用于在UB和矢量数据寄存器之间进行连续的非对齐数据搬运,其中非对齐特指数据起始地址未按32字节对齐。在搬运过程中,非对齐数据首先被加载到专用的非对齐寄存器,随后通过相应的搬运接口完成数据的分块读取或写入。

在读非对齐地址前,vector_load_unalign应该通过asc_loadunalign_pre初始化,然后再使用asc_loadunalign。在写非对齐地址时,应先使用asc_storeunalign,再使用asc_storeunalign_post进行处理。

调用示例

constexpr uint32_t one_repeat_size = 256 / sizeof(int8_t); // VL / sizeof(T) uint32_t total_length = 255; uint32_t repeat_time = (total_length + one_repeat_size - 1) / one_repeat_size; __simd_vf__ inline void neg_vf(__ubuf__ int8_t* dst_addr, __ubuf__ int8_t* src_addr, uint32_t count, uint32_t one_repeat_size, uint16_t repeat_time) { vector_int8_t src; vector_int8_t dst; vector_load_unalign ureg0; vector_store_unalign ureg1; vector_bool mask; for (uint16_t i = 0; i < repeat_time; ++i) { mask = asc_update_mask_b8(count); asc_loadunalign_pre(ureg0, src_addr + i * one_repeat_size); // 非对齐搬入前的初始化 asc_loadunalign(src, ureg0, src_addr + i * one_repeat_size); // 配合vector_load_unalign的使用,非对齐搬入源数据 asc_neg(dst, src, mask); asc_storeunalign(dst_addr + i * one_repeat_size, ureg1, dst, one_repeat_size); // 配合vector_store_unalign的使用,非对齐搬出目的数据 asc_storeunalign_post(dst_addr + i * one_repeat_size, ureg1, 0); // 处理非对齐搬出的尾块 } }

地址寄存器

地址寄存器的数据类型为iter_reg,用于存储地址偏移量。iter_reg通过asc_create_iter_reg初始化,然后在循环之中使用iter_reg存储地址偏移量。iter_reg在每层循环中根据所设置的步长进行自增。

调用示例

constexpr uint32_t one_repeat_size = 256 / sizeof(int8_t); // VL / sizeof(T) uint32_t total_length = 256; uint32_t repeat_time = total_length / one_repeat_size; __simd_vf__ inline void add_vf(__ubuf__ int8_t* dst_addr, __ubuf__ int8_t* src0_addr, __ubuf__ int8_t* src1_addr, uint32_t count, uint32_t one_repeat_size, uint16_t repeat_time) { vector_int8_t src0; vector_int8_t src1; vector_int8_t dst; vector_bool mask; iter_reg addr_reg; for (uint16_t i = 0; i < repeat_time; ++i) { addr_reg = asc_create_iter_reg_b8(one_repeat_size); // 通过初始化iter_reg,每一次循环,地址偏移one_repeat_size mask = asc_update_mask_b8(count); asc_loadalign(src0, src0_addr, addr_reg); asc_loadalign(src1, src1_addr, addr_reg); asc_add(dst, src0, src1, mask); asc_storealign(dst_addr, dst, addr_reg, mask); } }

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

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

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

相关文章:

  • 告别海思PQtool和SecureCRT:我的ISP图像调试入门工具包与避坑指南
  • 2026年天津代理记账公司推荐 荣天会计25年专注中小企业值得选择 - 本地品牌推荐
  • 从Notebook到生产:机器学习模型服务化七道工序
  • 多维聚合实战:从groupby到业务决策的七步炼金术
  • 告别代码!用ShaderGraph的5个‘隐藏’节点,轻松复刻那些经典Shader效果
  • GewisLab/CNEnvAir高级应用:多源数据融合与空间分析实战
  • ZYNQ7000新手避坑:用AXI GPIO扩展IO口,比EMIO更省心的实战配置指南
  • PDMS Pipeline Tool材料表实战:从MTO导出到螺栓表避坑,一份给管道工程师的完整指南
  • 适配正点原子IMX6ULL的QT车载主界面源码,集成音乐播放、视频播放与传感器扩展接口
  • Gemma-2b-alpaca-sft部署实战:云端、本地和边缘计算环境配置终极指南
  • 【实测】博尚6130型树枝粉碎机:出料细腻无结块,这才是小区绿化养护的好帮手! - 会飞的懒猪
  • PyTorch-NPU/bert_base_cased性能评测:在GLUE基准测试中超越90%模型的秘诀
  • 抖音批量下载工具:三步掌握高效内容管理新技能
  • 不止是游戏!HMS Core 5.2.0的CG Kit体积云特效,在电商和社交App里还能这么玩
  • Refactorator插件终极指南:如何在Xcode中高效重构Swift与Objective-C代码
  • LabVIEW温度监控避坑指南:从随机数模拟到真实硬件采集的进阶之路
  • TensorFlow数据管道性能优化:从GPU饥饿到95%利用率
  • 2026年6月北京老房翻新装修公司推荐:十大排行专业评测防隐患价格适用场景 - 品牌推荐
  • Quanser QUBE-Servo 2旋转倒立摆MATLAB强化学习控制套件(含DDPG/SAC预训练模型与硬件部署支持)
  • Matlab随机森林时序预测工具包|含数据集、多图可视化与四大误差指标计算
  • PDMS管道设计效率翻倍!手把手教你安装NakiPipeline插件(附常见错误排查)
  • 黑海岸python入门至精通 第3+4章
  • Gemma-4-31B-it长上下文窗口实战:256K token处理完全指南
  • 从智能手环到智能家居:深入浅出聊聊BLE连接那些‘意外’断开背后的故事
  • MOSS-Audio音乐理解能力详解:从风格分析到情感进展识别的完整指南
  • JS逆向之瑞数6案例(某某大学华南附属医院)
  • 2026年6月北京宣传片拍摄公司推荐:五大榜单专业评测案例性价比高选择指南 - 品牌推荐
  • 纯内容驱动的电影推荐系统:零用户行为,全靠TF-IDF与余弦相似度
  • LongCat-Flash-Chat-FP8架构设计哲学:美团大模型的技术创新
  • GewisLab/CNEnvAir源成分谱应用:PMF/CMB模型数据准备指南