概述【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit复合计算通常指的是在数学或编程中对复合函数或运算的处理。表1复合指令功能说明API数学表达Axpy$dst_jscalar \times src_i dst_i$MulAddDst$dst_jsrc0_i \times src1_i dst_i$MulCast$dst_iCast(src0_i \times src1_i)$MulsCast(ISASI).md)$dst_iCast(src_i \times scalar)$AddRelu$dst_iRelu(src0_i src1_i)$AddReluCast$dst_iCast(Relu(src0_i src1_i))$SubRelu$dst_iRelu(src0_i - src1_i)$SubReluCast$dst_iCast(Relu(src0_i - src1_i))$AbsSub(ISASI).md)$dst_i\lvert src0_i - src1_i\rvert$ExpSub(ISASI).md)$dst_ie^{src0_i - src1_i}$FusedMulAdd$dst_jsrc0_i \times dst_i src1_i$MulAddRelu$dst_iRelu(src0_i \times dst_i src1_i)$CastDequant• 输入数据类型为int16_t关闭向量量化模式$dst_iCast(src_i \times scale offset)$• 输入数据类型为int16_t开启向量量化模式$dst_iCast(src_i \times scale_j offset_j),j \in [0,15]$• 输入类型为int32_t对int32_t类型的输入做量化并进行精度转换采用RINT舍入$dst_iCast(src_i \times scale)$AddDeqRelu$dst_iRelu(Deq(src0_i src1_i))$$Deq(x)Cast(x \times scale)$推荐使用场景UB资源紧张场景。使用复合指令能在不修改源操作数原有数据的同时减少UB空间的使用。高性能场景。在不考虑bank冲突等其它因素的情况下由于使用复合指令能够减少计算指令的数量能够带来性能提升。高精度场景。对于源操作数和目的操作数类型一致的情况使用复合指令不提升精度对于目的操作数数据类型精度高于源操作数的情况使用复合指令有精度提升如源操作数数据类型为half目的操作数数据类型为float如Axpy、MulAddDst。关键特性说明精度转换MulCast、AddReluCast、SubReluCast、MulsCast指令包含类型转换操作转换规则参考下表表2精度转换规则源操作数的数据类型目的操作数的数据类型类型转换模式介绍floathalf将源操作数按照CAST_NONE模式取到half所能表示的数以half格式溢出默认按照饱和处理存入目的操作数中。halfint8_t将源操作数按照CAST_NONE模式取整以int8_t格式溢出默认按照饱和处理存入目的操作数中。halfuint8_t将源操作数按照CAST_NONE模式取整以uint8_t格式溢出默认按照饱和处理存入目的操作数中。int16_tint8_t将源操作数按照CAST_NONE模式取到int8_t所能表示的数以int8_t格式溢出默认按照饱和处理存入目的操作数中。int64_tfloat将源操作数按照CAST_NONE模式取到float所能表示的数以float格式溢出默认按照饱和处理存入目的操作数中。int64_tint32_t将源操作数以int32_t格式溢出默认按照饱和处理存入目的操作数中量化计算CastDequant、AddDeqRelu接口涉及量化参数的设置需要结合SetDeqScale接口使用。三操作数读取对于MulAddDst、FusedMulAdd、MulAddRelu接口若三个操作数均不重叠将存在三读一写情况其中目的操作数上既有读操作又有写操作由于硬件最多支持两读一写指令的理论并行度将在原有基础上减半针对该情况可通过重叠操作数减少读操作来恢复原并行度。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考