高维切分【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit[!NOTE]说明本章节对矢量计算基础API中的tensor高维切分计算接口做解释说明。如果您不需要使用此类接口可略过该章节。下文中的repeatTime、dataBlockStride、repeatStride、mask为通用描述其命名不一定与具体指令中的参数命名完全对应。比如单次迭代内不同DataBlock间地址步长dataBlockStride参数在单目API中对应为dstBlkStride、srcBlkStride参数在双目API中对应为dstBlkStride、src0BlkStride、src1BlkStride参数。您可以在具体接口的参数说明中找到参数含义的描述。高维切分API支持repeatTime、stride和mask参数能控制指令的迭代执行、操作数的地址间隔和迭代内的掩码功能更加灵活。以Exp接口为例接口调用形式如下Exp(dst, src0, src1, mask, repeatTime, {dstBlkStride, ..., dstRepStride, ...});迭代控制Vector计算单元每个迭代会从UB中取出8个DataBlock每个DataBlock数据块内部地址连续长度为32Byte进行计算并写入对应的8个DataBlock中。下图为单次迭代内的8个DataBlock进行Exp计算的示意图。图 1单次迭代内的8个DataBlock进行Exp计算示意图矢量计算API支持开发者通过repeatTime来配置迭代次数从而控制指令的多次迭代执行。假设repeatTime设置为2矢量计算单元会进行2个迭代的计算可计算出2 * 8每个迭代8个DataBlock * 32Byte 512Byte的结果。如果数据类型为half则计算了256个元素。下图展示了2次迭代Exp计算的示意图。由于硬件限制repeatTime不能超过255。图 22次迭代Exp计算掩码配置针对同一个迭代中的数据可以通过mask参数进行掩码操作来控制实际参与计算的个数。下图为进行Abs计算时通过mask逐比特模式按位控制哪些元素参与计算的示意图1表示参与计算0表示不参与计算。关于掩码的详细介绍请参考掩码。图 3通过mask参数进行掩码操作示意图以int32数据类型为例地址间隔配置矢量计算单元还支持带间隔的向量计算通过dataBlockStride单次迭代内不同DataBlock间地址步长和repeatStride相邻迭代间相同DataBlock的地址步长来进行配置。dataBlockStridedataBlockStride是指单次迭代内不同DataBlock间地址步长。其取值不能超过UB大小限制。连续计算dataBlockStride设置为1对同一迭代内的8个DataBlock数据连续进行处理。非连续计算dataBlockStride值大于1如取2同一迭代内不同DataBlock之间在读取数据时出现一个DataBlock的间隔如下图所示。图 4dataBlockStride不同取值举例注若dstBlkStride0等同于dstBlkStride1若srcBlkStride0则源操作数将始终复用第一个DataBlock。下图给出了单次迭代内源操作数与目的操作数在UB空间的读写示例。示例中源操作数的dataBlockStride配置为2表示单次迭代内不同DataBlock间地址步长为2个DataBlock目的操作数的dataBlockStride配置为1表示单次迭代内地址连续。图 5单次迭代内非连续场景的示意图repeatStriderepeatStride是指相邻迭代间相同DataBlock的地址步长。连续计算场景假设定义一个Tensor供目的操作数和源操作数同时使用即地址重叠repeatStride取值为8。此时矢量计算单元第一次迭代读取连续8个DataBlock第二轮迭代读取下一个连续的8个DataBlock通过多次迭代即可完成所有输入数据的计算。非连续计算场景repeatStride取值大于8如取10时则相邻迭代间矢量计算单元读取的数据在地址上不连续出现2个DataBlock的间隔。反复计算场景repeatStride取值为0时矢量计算单元会对首个连续的8个DataBlock进行反复读取和计算。部分重复计算repeatStride取值大于0且小于8时相邻迭代间部分数据会被矢量计算单元重复读取和计算此种情形一般场景不涉及。当repeatTime大于1需要多次迭代完成矢量计算时开发者可以根据不同的使用场景合理设置repeatStride的值。下图给出了多次迭代间非连续场景的示意图示例中源操作数和目的操作数的repeatStride均配置为9表示相邻迭代间相同DataBlock起始地址之间的间隔为9个DataBlock。相同DataBlock是指DataBlock在迭代内的位置相同比如下图中的src1和src9处于相邻迭代在迭代内都是第一个DataBlock的位置其间隔即为repeatStride的数值。图 6多次迭代间非连续场景的示意图【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考