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

CANN/asc-devkit SIMD API量化设置

SetDeqScale

【免费下载链接】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 推理产品

x

Atlas 推理系列产品 AI Core

Atlas 推理系列产品 Vector Core

x

Atlas 训练系列产品

x

功能说明

设置DEQSCALE寄存器的值。

函数原型

  • 用于AddDeqRelu/Cast/CastDeq的s322f16场景

    __aicore__ inline void SetDeqScale(half scale)
  • 用于CastDeq(isVecDeq=false)的场景

    __aicore__ inline void SetDeqScale(float scale, int16_t offset, bool signMode)
  • 用于CastDeq(isVecDeq=true)的场景

    template <typename T> __aicore__ inline void SetDeqScale(const LocalTensor<T>& vdeq, const VdeqInfo& vdeqInfo)

参数说明

表 1模板参数说明

参数名

描述

T

输入量化Tensor的数据类型。支持的数据类型为uint64_t。

表 2参数说明

参数名

输入/输出

描述

scale(half)

输入

scale量化参数,half类型。

Ascend 950PR/Ascend 950DT:用于AddDeqRelu/CastDeq/Cast的s322f16场景。

Atlas A3 训练系列产品 / Atlas A3 推理系列产品,用于AddDeqRelu/Cast/CastDeq的s322f16场景。

Atlas A2 训练系列产品 / Atlas A2 推理系列产品,用于AddDeqRelu/Cast/CastDeq的s322f16场景。

Atlas 推理系列产品 AI Core:用于AddDeqRelu或者Cast的s322f16场景。

scale(float)

输入

scale量化参数,float类型。

用于CastDeq(isVecDeq=false)场景设置DEQSCALE寄存器的值。

offset

输入

offset量化参数,int16_t类型,只有前9位有效。

用于CastDeq(isVecDeq=false)的场景,设置offset。

signMode

输入

bool类型,表示量化结果是否带符号。

用于CastDeq(isVecDeq=false)的场景,设置signMode。

vdeq

输入

用于CastDeq(isVecDeq=true)的场景,输入量化tensor,大小为128Byte。

类型为LocalTensor,支持的TPosition为VECIN/VECCALC/VECOUT。

LocalTensor的起始地址需要32字节对齐。

vdeqInfo

输入

存储量化tensor信息的数据结构,结构体内包含量化tensor中的16组量化参数

const uint8_t VDEQ_TENSOR_SIZE = 16;

struct VdeqInfo {aicoreVdeqInfo() {}aicoreVdeqInfo(const float vdeqScaleIn[VDEQ_TENSOR_SIZE], const int16_t vdeqOffsetIn[VDEQ_TENSOR_SIZE], const bool vdeqSignModeIn[VDEQ_TENSOR_SIZE]) { for (int32_t i = 0; i < VDEQ_TENSOR_SIZE; ++i) { vdeqScale[i] = vdeqScaleIn[i]; vdeqOffset[i] = vdeqOffsetIn[i]; vdeqSignMode[i] = vdeqSignModeIn[i]; } }

float vdeqScale[VDEQ_TENSOR_SIZE] = { 0 }; int16_t vdeqOffset[VDEQ_TENSOR_SIZE] = { 0 }; bool vdeqSignMode[VDEQ_TENSOR_SIZE] = { 0 };

};

返回值说明

约束说明

调用示例

  • SetDeqScale(half scale)

    // 配合Cast的s322f16场景使用 // dstLocal为half类型的LocalTensor,srcLocal为int32_t类型的LocalTensor uint32_t srcSize = 256; // 参与计算的元素个数 half scale = 1.0; // 量化参数为1 AscendC::SetDeqScale(scale); // dst = src AscendC::Cast(dstLocal, srcLocal, AscendC::RoundMode::CAST_NONE, srcSize);

    结果示例如下:

    输入数据(srcLocal): [1, 2, 3, 4, 5, 6, ... 256] 输出数据(dstLocal): [1, 2, 3, 4, 5, 6, ... 256]
  • SetDeqScale(float scale, int16_t offset, bool signMode)

    // 配合CastDeq(isVecDeq=false)场景使用 // dstLocal为int8_t类型的LocalTensor,srcLocal为int16_t类型的LocalTensor uint32_t srcSize = 256; // 参与计算的元素个数 float scale = 1.0; // 量化参数为1 int16_t offset = 0; // 不带偏移 bool signMode = true; // dstLocal为int8_t类型,为有符号数 AscendC::SetDeqScale(scale, offset, signMode); // dst = src AscendC::CastDeq<int8_t, int16_t, false, false>(dstLocal, srcLocal, srcSize);

    结果示例如下:

    输入数据(srcLocal): [[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] [ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ] [ 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ] [ 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 ] [ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] [ 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 ] [ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 ] [ 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 ] 输出数据(dstLocal): // 写入dstLocal的上半Block [[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
  • SetDeqScale(const LocalTensor<T>& vdeq, const VdeqInfo& vdeqInfo)

    // 配合CastDeq(isVecDeq=true)场景使用 // dstLocal为int8_t类型的LocalTensor,srcLocal为int16_t类型的LocalTensor uint32_t srcSize = 256; // 参与计算的元素个数 float vdeqScale[16] = { 0 }; int16_t vdeqOffset[16] = { 0 }; bool vdeqSignMode[16] = { 0 }; for (int i = 0; i < 16; i++) { vdeqScale[i] = 1.0; // 量化参数为1 vdeqOffset[i] = 0; // 不带偏移 vdeqSignMode[i] = true; // dstLocal为int8_t类型,为有符号数 } AscendC::VdeqInfo vdeqInfo(vdeqScale, vdeqOffset, vdeqSignMode); AscendC::SetDeqScale<uint64_t>(tmpBuffer, vdeqInfo); // dst = src AscendC::CastDeq<int8_t, int16_t, true, true>(dstLocal, srcLocal, srcSize);

    结果示例如下:

    输入数据(srcLocal): [[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ] [ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ] [ 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ] [ 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 ] [ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ] [ 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 ] [ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 ] [ 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 ] 输出数据(dstLocal): // 写入dstLocal的下半Block [[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127]]

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

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

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

相关文章:

  • 如何利用Codex智能解析复杂命令:终极指南与实用技巧
  • Cursor设备标识重置技术:3分钟解决试用限制的完整方案
  • 超以太网联盟挑战英伟达:AI算力网络开放标准之战
  • 全域数学公理:基于32维超复数与易经卦爻的宇宙大一统理论(整理版)
  • 深圳爱格板材全屋定制怎么选?2026 权威实测榜单出炉 - 兔兔不是荼荼
  • 2026年大厂Java面试高频场景题 + 八股文(万字干货,纯手工硬核整理)
  • 蓝图玩家的福音:不用写代码,用UE5.2.1把Windows和安卓包都打出来(附完整配置清单)
  • 2026年5月广州纸板/纸箱/PP聚丙烯中空箱/包装袋/缠绕膜/封箱胶厂家哪家好,认准东莞市复星纸品有限公司 - 2026年企业推荐榜
  • Lusca部署指南:生产环境中的最佳安全实践
  • OpenArm开源机械臂终极指南:从零开始构建你的7自由度人形手臂
  • 5维体验:如何用Pixelle-Video让AI帮你完成短视频创作的全流程
  • 2026.5.20总结
  • 如何在Windows11中自定义快捷方式?提升操作效率的技巧
  • BongoCat虚拟猫咪助手终极教程:打造你的跨平台桌面互动伙伴
  • RISC-V中断实战:手把手教你用QEMU模拟器调试四种中断(附代码)
  • 2026 年USB连接器十大品牌排名及解析 - 十大品牌榜
  • 2026成都短期周转黄金变现,快速回收解燃眉之急 - 诚鑫名品
  • 我用 PAI/Codex 理解 Harness Engineering:Agent 工作环境到底怎么搭
  • Camera Shakify:Blender相机动画终极实战指南
  • Flowpilot传感器融合技术:摄像头、GPS、IMU和磁力计的协同工作原理
  • 猫抓插件终极指南:三步搞定网页视频音频下载的完整解决方案
  • 飞书 CLI vs 企业微信 CLI vs 钉钉 CLI:三大办公平台终端工具横评
  • 个人刷卡 pos 刷卡机免费上门办理,官方授权大额刷卡无年费选购指南 - 资讯速览
  • CANN/asc-devkit SIMD-API同步控制
  • 静态库 vs 共享库:从一次课程互测聊聊Linux下C库的实战选择与底层原理(PIC/GOT/PLT)
  • dialoqbase社区贡献指南:如何参与这个开源项目并成为核心贡献者
  • 2026年Q2中国防水工程优质服务商首选推荐:合肥晴空防水装饰工程有限公司 - 安互工业信息
  • 考试宝丨 刷题工具怎么选? 34 项业务精准破局行业痛点 - 讲清楚了
  • BongoCat终极指南:5分钟打造你的跨平台互动桌宠
  • 如何快速掌握FunASR后端解码:从声学特征到文本的完整指南