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

CANN Ascend C SIMD And逻辑运算

# And

【免费下载链接】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/reg_compute/kernel_reg_compute_vec_binary_intf.h"(对RegTensor操作)、"basic_api/reg_compute/kernel_reg_compute_maskreg_intf.h"(对MaskReg操作)。

本节介绍两种接口,分别用于对RegTensor和MaskReg进行操作:

  • RegTensor操作:

    根据mask对输入数据srcReg0、srcReg1执行按位与(&)操作,将结果写入dstReg。

  • MaskReg操作:

    根据mask对两个输入MaskReg数据src0、src1执行按位与操作,将结果写入dst。

函数原型

  • RegTensor操作

    template <typename T = DefaultType, MaskMergeMode mode = MaskMergeMode::ZEROING, typename U> __simd_callee__ inline void And(U& dstReg, U& srcReg0, U& srcReg1, MaskReg& mask)
  • MaskReg操作

    __simd_callee__ inline void And(MaskReg& dst, MaskReg& src0, MaskReg& src1, MaskReg& mask)

参数说明

  • RegTensor操作

    表1模板参数说明

    参数名描述
    T操作数数据类型。
    modeMaskMergeMode枚举类型。选择MERGING模式或ZEROING模式。
    • ZEROING模式下,mask未筛选的元素在dstReg中置零。
    • MERGING模式当前不支持。
    U目的操作数和源操作数的RegTensor类型,例如RegTensor<uint32_t>,由编译器自动推导,用户不需要填写。

    表2参数说明

    参数名输入/输出描述
    dstReg输出目的操作数。
    类型为RegTensor。
    srcReg0输入源操作数。
    类型为RegTensor。
    两个源操作数的数据类型需要与目的操作数保持一致。
    srcReg1输入源操作数。
    类型为RegTensor。
    两个源操作数的数据类型需要与目的操作数保持一致。
    mask输入指示源操作数元素操作的有效性,详细说明请参考MaskReg文档。
  • 对MaskReg操作

    表3参数说明

    参数名描述
    dst目的操作数。
    src0源操作数。
    src1源操作数。
    mask指示在计算过程中哪些bit有效。

返回值说明

数据类型

支持的数据类型为:bool、int8_t、uint8_t、int16_t、uint16_t、int32_t、uint32_t、int64_t、uint64_t。

约束说明

调用示例

  • RegTensor操作

    template <typename T> __simd_vf__ inline void AndVF(__ubuf__ T* dstAddr, __ubuf__ T* src0Addr, __ubuf__ T* src1Addr, uint32_t count, uint32_t oneRepeatSize, uint16_t repeatTimes) { AscendC::Reg::RegTensor<T> srcReg0; AscendC::Reg::RegTensor<T> srcReg1; AscendC::Reg::RegTensor<T> dstReg; AscendC::Reg::MaskReg mask; for (uint16_t i = 0; i < repeatTimes; i++) { mask = AscendC::Reg::UpdateMask<T>(count); AscendC::Reg::LoadAlign(srcReg0, src0Addr + i * oneRepeatSize); AscendC::Reg::LoadAlign(srcReg1, src1Addr + i * oneRepeatSize); AscendC::Reg::And(dstReg, srcReg0, srcReg1, mask); AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, dstReg, mask); } }
  • MaskReg操作

    template <typename T> __simd_vf__ inline void AndVF(__ubuf__ T* dstAddr, __ubuf__ T* srcAddr, uint32_t count, uint32_t oneRepeatSize, uint16_t repeatTimes) { AscendC::Reg::RegTensor<T> srcReg; AscendC::Reg::MaskReg src0 = AscendC::Reg::CreateMask<T, AscendC::Reg::MaskPattern::ALLF>(); AscendC::Reg::MaskReg src1 = AscendC::Reg::CreateMask<T, AscendC::Reg::MaskPattern::ALL>(); AscendC::Reg::MaskReg dst; AscendC::Reg::MaskReg mask; for (uint16_t i = 0; i < repeatTimes; ++i) { mask = AscendC::Reg::UpdateMask<T>(count); AscendC::Reg::LoadAlign(srcReg, srcAddr + i * oneRepeatSize); AscendC::Reg::And(dst, src0, src1, mask); AscendC::Reg::Adds(srcReg, srcReg, 0, dst); AscendC::Reg::StoreAlign(dstAddr + i * oneRepeatSize, srcReg, mask); } }

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

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

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

相关文章:

  • FitGirl Repack Launcher完整指南:3分钟打造个人游戏管理中心
  • 3步解决ZIP密码遗忘问题:bkcrack破解工具完整指南
  • Agent Skills技术解析:标准化AI能力封装与应用
  • Llama+Dify本地AI工作流搭建与优化指南
  • 送长辈奶粉怎么选?低GI认证+有机奶源,3款热门礼盒对比 - 资讯在线
  • 5分钟搞定:Figma-Context-MCP的终极部署指南,让AI助手秒懂你的设计稿
  • 王者荣耀AI训练终极指南:5步构建智能游戏助手的完整方案
  • QCMA深度解析:3步实现PS Vita跨平台内容管理自由
  • Comic Backup 架构解析:自动化漫画备份与CBZ格式转换实战指南
  • 索尼与索诺斯家庭影院大比拼:音质、规格、适用场景全解析,作者更青睐谁?
  • 终极开发者指南:基于MediaInfoLib构建自定义音视频信息提取工具
  • 5个必知技巧:YimMenu如何让你的GTA5游戏体验更安全更有趣
  • 企业级AI决策框架:通义千问32K上下文模型的战略选择与实施路径
  • ADAMS与AMESim联合仿真实战:从环境配置到避坑指南
  • 2026 郑州名包回收实测:跑遍多家店,为什么最终选了易奢福? - 肉松卷
  • 5分钟零门槛AI绘画革命:Fooocus让你专注创意而非参数
  • 雷克萨斯ES300h的DSP升级怎么做?中山永丰案例中的FREUDE弗莱德方案观察
  • CANN/asc-devkit ReleaseMutexID核内同步API文档
  • 5大核心功能解析:YimMenu如何为GTA5玩家打造安全游戏环境
  • 如何解密PC微信小程序包:wxapkg解密技术实战指南
  • C语言指针核心原理:从内存地址到动态内存管理的实战指南
  • 揭秘Assistant-UI:下一代AI聊天界面的三大突破与实战指南
  • Codex与GLM-5.2协议桥接实战:LiteLLM实现无缝对接
  • Windows 11系统优化终极指南:使用Win11Debloat实现性能与隐私的双重提升
  • 2026 昆明欧米茄回收全攻略|同德商圈避坑不被乱压价 - 分享测评官
  • Codex五大必装插件:构建智能开发工作流闭环
  • Mac产品线解析与开发环境搭建指南
  • 一、万信金融项目——从合规银行存管看P2P平台的技术架构演进
  • XScene-UEPlugin终极指南:5步掌握UE5高斯泼溅模型完整工作流
  • 终极PS4存档管理指南:Apollo Save Tool完整使用教程