CANN/asc-devkit SetFmatrix矩阵配置接口
# SetFmatrix【免费下载链接】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 训练系列产品不支持Kirin X90支持Kirin 9030支持功能说明头文件路径为basic_api/kernel_operator_mm_intf.h。用于调用LoadData卷积数据搬运时设置FeatureMap的属性描述。LoadData卷积数据搬运的模板参数isSetFMatrix设置为false时表示LoadData卷积数据搬运传入的FeatureMap的属性包括l1H、l1W、padList参数介绍参考表3 LoadData3DParamsV1结构体内参数说明、表4 LoadData3DParamsV2结构体内参数说明将不生效开发者需要通过该接口进行设置。函数原型__aicore__ inline void SetFmatrix(uint16_t l1H, uint16_t l1W, const uint8_t padList[4], const FmatrixMode fmatrixMode)参数说明表1参数说明参数名称输入/输出含义l1H输入源操作数height取值范围l1H∈[1, 32767]。l1W输入源操作数width取值范围l1W∈[1, 32767]。padList输入padding列表 [padding_left, padding_right, padding_top, padding_bottom]每个元素取值范围[0,255]。默认为{0, 0, 0, 0}。fmatrixMode输入用于控制LoadData指令从left还是right寄存器获取信息。FmatrixMode类型定义如下。当前只支持FMATRIX_LEFT左右矩阵均使用该配置。enum class FmatrixMode : uint8_t {FMATRIX_LEFT 0,FMATRIX_RIGHT 1,};返回值说明无约束说明该接口需要配合LoadData卷积数据搬运接口一起使用需要在LoadData卷积数据搬运接口之前调用其中fmatrixMode参数需要和LoadData卷积数据搬运接口参数中的fMatrixCtrl值保持一致。操作数地址对齐要求请参见通用地址对齐约束。调用示例完整调用示例参考SetLoadDataBoundary样例以下为样例中的关键代码片段示例AscendC::LoadData3DParamsV2U loadData3dParams; loadData3dParams.l1W 1; loadData3dParams.l1H K; loadData3dParams.channelSize N; loadData3dParams.kExtension N; loadData3dParams.mExtension K; loadData3dParams.kStartPt 0; loadData3dParams.mStartPt 0; loadData3dParams.strideW 1; loadData3dParams.strideH 1; loadData3dParams.filterW 1; loadData3dParams.filterH 1; loadData3dParams.dilationFilterW 1; loadData3dParams.dilationFilterH 1; loadData3dParams.enTranspose true; loadData3dParams.enSmallK false; loadData3dParams.padValue 0; loadData3dParams.filterSizeW 0; loadData3dParams.filterSizeH 0; loadData3dParams.fMatrixCtrl false; uint8_t padList[AscendC::PAD_SIZE] {0, 0, 0, 0}; static constexpr AscendC::IsResetLoad3dConfig LOAD3D_CONFIG {false, false}; AscendC::SetFmatrix(N, 1, padList, AscendC::FmatrixMode::FMATRIX_LEFT); // 使能FM内存排布模式从left寄存器获取信息 #if defined(__NPU_ARCH__) (__NPU_ARCH__ 2201) AscendC::SetLoadDataRepeat({0, 1, 0}); AscendC::SetLoadDataBoundary(0); AscendC::SetLoadDataPaddingValue(0); AscendC::LoadDataU, LOAD3D_CONFIG(b2, rightMatrix, loadData3dParams); #elif defined(__NPU_ARCH__) (__NPU_ARCH__ 3510) uint16_t dstStride DivCeil(N, 16); AscendC::SetLoadDataRepeatWithStride({0, 1, 0, dstStride}); AscendC::SetLoadDataPaddingValue(0); AscendC::LoadDataWithStrideU, LOAD3D_CONFIG(b2, rightMatrix, loadData3dParams); #endif【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考