Skip to content

Fill

产品支持情况

  • 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"

将特定物理存储位置的LocalTensor初始化为某一具体数值。仅支持L1 Buffer/L0A Buffer/L0B Buffer上的LocalTensor初始化。

如下图所示,将数据空间内最后三行初始化为0,配置InitConstValueParams参数:initValue=0表示初始化值为0,repeatTimes=5表示按照行方向迭代5次,blockNum=3表示每次repeat对列方向的3块32Byte数据块清0,dstGap=5表示相邻repeat之间间隔5个数据块。

图1 L1 Buffer中Fill示意图

如下图所示,将内存空间内的值全部初始化为0,需要配置InitConstValueParams参数:initValue=0表示初始化值为0,repeatTimes=5表示按照行方向迭代5次,blockNum=2表示每次repeat对列方向的2块512Byte数据块清0,dstGap=3表示相邻repeat之间间隔3个数据块。

图2 L0A Buffer中Fill示意图

函数原型

C++
template <typename T, typename U = PrimT<T>, typename Std::enable_if<Std::is_same<PrimT<T>, U>::value, bool>::type = true>
__aicore__ inline void Fill(const LocalTensor<T>& dst, const InitConstValueParams<U>& initConstValueParams)

参数说明

表1 模板参数说明

参数名称描述
Tdst的数据类型。
U初始化值的数据类型。
  •当dst使用基础数据类型时,U和dst的数据类型T需保持一致,否则编译失败。
  •当dst使用TensorTrait类型时,U和dst的数据类型T的LiteType需保持一致,否则编译失败。
  最后一个模板参数仅用于上述数据类型检查,用户无需关注。

表2 参数说明

参数名称输入/输出含义
dst输出目的操作数,结果矩阵,类型为LocalTensor。
InitConstValueParams输入初始化相关参数,类型为InitConstValueParams。
具体定义请参考${INSTALL_DIR}/asc/include/basic_api/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。
参数说明请参考表3

表3 InitConstValueParams结构体参数说明

参数名称含义
repeatTimes迭代次数。默认值为0。取值范围:repeatTimes∈[0, 32767]。注:repeatTimes = 0表示不执行,该指令将被视为NOP(空操作)。
blockNum每次迭代初始化的数据块个数,取值范围:blockNum∈[0, 32767]。默认值为0。注:blockNum = 0表示不执行,该指令将被视为NOP(空操作)。
  • dst的物理存储位置为L1 Buffer(TPosition: A1/B1)时,每一个block(数据块)大小是32B;
  • dst的物理存储位置为L0A Buffer(TPosition: A2)/L0B Buffer(TPosition: B2)时,每一个block(数据块)大小是512B。
dstGap目的操作数前一个迭代结束地址到后一个迭代起始地址之间的距离。
  • dst的物理存储位置为L1 Buffer(TPosition: A1/B1)时,单位是32B;
  • dst的物理存储位置为L0A Buffer(TPosition: A2)/L0B Buffer(TPosition: B2)时,单位是512B。
  取值范围:dstGap∈[0, 32767]。默认值为0。
initValue初始化的value值,支持的数据类型与dst保持一致。

数据类型

Atlas 训练系列产品,支持的数据类型为:half。

Atlas 推理系列产品AI Core,支持的数据类型为:int16_t、uint16_t、half。

Atlas A2训练系列产品/Atlas A2推理系列产品,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Atlas A3训练系列产品/Atlas A3推理系列产品,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Atlas 200I/500 A2 推理产品,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Ascend 950PR/Ascend 950DT,支持的数据类型为:int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float。

Kirin X90,支持的数据类型为:int8_t、half。

Kirin 9030,支持的数据类型为:half。

返回值说明

约束说明

  • 操作数地址对齐要求请参见通用地址对齐约束

  • 当目的操作数位于L0A Buffer/L0B Buffer时,指令执行占用的流水为PIPE_MTE1,目的操作数地址需要512Byte对齐。当目的操作数位于L1 Buffer时,指令执行占用的流水为PIPE_MTE2,目的地址需要32Byte对齐。

  • 当repeatTimes为0或者blockNum为0时,指令不会进行任何操作。

  • 不同的型号在设置InitConstValueParams参数时,支持配置参数的不同。

    • 仅支持配置迭代次数和初始化值场景下,其他参数配置无效。每次迭代处理固定数据量(512字节),迭代间无间隔。

    • 支持配置所有参数场景下,支持配置迭代次数、初始化值、每个迭代处理的数据块个数和迭代间间隔。

    • 特别地,针对如下型号,仅支持配置迭代次数和初始化值。

      • Atlas 训练系列产品。
      • Atlas 推理系列产品AI Core。
  • 支持的物理存储位置为:L1 Buffer(TPosition: A1/B1)、L0A Buffer(TPosition: A2)、L0B Buffer(TPosition: B2)。

    • 特别针对Ascend 950PR/Ascend 950DT,支持物理存储位置为:L1 Buffer(TPosition: A1/B1)。
    • 如果物理存储位置为L1 Buffer(TPosition: A1/B1),起始地址需要满足32B对齐;
    • 如果物理存储位置为L0A Buffer(TPosition: A2)、L0B Buffer(TPosition: B2),起始地址需要满足512B对齐。

调用示例

C++
uint32_t mLength = 16;
uint32_t kLength = 16;
Fill(leftMatrix, {1, static_cast<uint16_t>(mLength * kLength * sizeof(float) / 32), 0, 1}); // 给leftMatrix填充mLength * kLength长度的数据为1,按32B的颗粒度进行填充

若接口用于对L1 Buffer/L0A Buffer/L0B Buffer上的LocalTensor清0使用,示例请参考:Fill调用样例

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区