CANN/asc-devkit SetLoadDataRepeat接口 SetLoadDataRepeat【免费下载链接】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/kernel_operator_mm_intf.h。用于设置LoadData卷积数据搬运接口的repeat参数。设置repeat参数后可以通过调用一次LoadData卷积数据搬运接口完成多个迭代的数据搬运。函数原型__aicore__ inline void SetLoadDataRepeat(const LoadDataRepeatParam repeatParams)参数说明接口参数和结构体参数说明表1参数说明参数名称输入/输出含义repeatParams输入设置LoadData卷积数据搬运接口的repeat参数类型为LoadDataRepeatParam。具体定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。参数说明请参考表2。表2LoadDataRepeatParam结构体参数说明参数名称含义repeatStrideheight/width方向上的前一个迭代与后一个迭代起始地址的距离取值范围repeatStride∈[0, 65535]默认值为0。• repeatMode为0repeatStride的单位为16个元素。• repeatMode为1repeatStride的单位和具体型号有关。下文中的data_type指LoadData卷积数据搬运v2中源操作数的数据类型。repeatTimeheight/width方向上的迭代次数取值范围repeatTime∈[0, 255]。默认值为1。repeatMode控制repeat迭代的方向取值范围repeatMode∈[0, 1]。默认值为0。• 0迭代沿height方向• 1迭代沿width方向。dstStride输出矩阵K轴方向偏移以512B分形为单位。不同的型号dstStride的支持度不同请参考dstStride参数支持度说明。dstStride参数支持度说明针对Ascend 950PR/Ascend 950DT新增dstStride参数调用该接口必须配置参数dstStride。针对Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。针对Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。针对Atlas 200I/500 A2 推理产品不支持该参数。返回值说明无约束说明迭代沿height方向时repeatStride的单位为16个元素迭代沿width方向时repeatStride的单位为32/sizeof(data_type)个元素。repeatTime0表示LoadData卷积数据搬运不执行搬运LoadData卷积数据搬运接口将被视为NOP空操作。针对Ascend 950PR/Ascend 950DT调用LoadData卷积数据搬运指令时必须配置本接口中dstStride参数。不同芯片型号repeatStride的单位不同具体参考如下Ascend 950PR/Ascend 950DTrepeatStride的单位为32/sizeof(data_type)个元素。Atlas A2 训练系列产品/Atlas A2 推理系列产品repeatStride的单位为32/sizeof(data_type)个元素。Atlas A3 训练系列产品/Atlas A3 推理系列产品repeatStride的单位为32/sizeof(data_type)个元素。Atlas 200I/500 A2 推理产品repeatStride的单位为64/sizeof(data_type)个元素。调用示例展示代码示例片段// LoadData卷积数据搬运v2指令完成img2col的过程可知img2col后A矩阵高度为ho * wo根据ho和wo的计算公式代入卷积核宽度、卷积核滑动步长、卷积核膨胀系数等参数可知A矩阵的高度为CeilAlign(k, fractalShape[0])img2col后A矩阵宽度为ci * kh * kw代入kh1kw1可知A矩阵的宽度为CeilAlign(m, fractalShape[1])。最后配置loadDataParams.enTranspose true将整个A矩阵转置并且将其中每一个分形转置 // 使用load3d接口实现NZ2ZZ AscendC::LoadData3DParamsV2T loadDataParams; // 设置loadDataParams相关参数 ... // 使用SetLoadDataRepeat接口设置LoadData卷积数据搬运v2接口的repeat参数 AscendC::LoadDataRepeatParam repeatParams; repeatParams.repeatTime 1; // height/width方向上的迭代次数 repeatParams.repeatStride 1; // height/width方向上前后迭代起始位置的距离 repeatParams.repeatMode 0; // 迭代方向0: 迭代沿height; 1: 迭代沿width repeatParams.dstStride CeilDivision(m, fractalShape[0]); // 输出矩阵K轴方向偏移 AscendC::SetLoadDataRepeat(repeatParams); AscendC::LoadData(a2Local, a1Local, loadDataParams);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考