CANN/asc-devkit SetFmatrix矩阵配置接口
2026/7/16 13:06:26 网站建设 项目流程

# 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::LoadData3DParamsV2<U> 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::LoadData<U, 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::LoadDataWithStride<U, LOAD3D_CONFIG>(b2, rightMatrix, loadData3dParams); #endif

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

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询