Skip to content

SetFmatrix

产品支持情况

  • 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结构体内参数说明)将不生效,开发者需要通过该接口进行设置。

函数原型

C++
__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,
};

返回值说明

约束说明

调用示例

完整调用示例参考SetLoadDataBoundary样例,以下为样例中的关键代码片段示例:

C++
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 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区