SetPadValue(ISASI)

产品支持情况

  • 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_data_copy_intf.h"

DataCopyPad(GMToUB非对齐数据搬运)从Global Memory将数据非对齐搬运至Unified Buffer时,可根据开发者的需要自行填充数据。SetPadValue用于设置DataCopyPad需要填充的数值。

具体支持的数据通路为(以逻辑位置TPosition表示):

  • Global Memory -> Unified Buffer
    • GM -> VECIN
    • GM -> VECOUT

函数原型

template <typename T, TPosition pos = TPosition::MAX>
__aicore__ inline void SetPadValue(T paddingValue)

参数说明

表1 模板参数说明

参数名 输入/输出 描述
T 输入 填充值的数据类型,与DataCopyPad接口搬运的数据类型一致。
pos 输入 用于指定DataCopyPad接口搬运过程中从Global Memory搬运数据到哪一个目的地址,目的地址通过逻辑位置来表达。默认值为TPosition::MAX,等效于TPosition::VECIN或TPosition::VECOUT。
支持的取值为:
• TPosition::VECIN、TPosition::VECOUT、TPosition::MAX

表2 参数说明

参数名 输入/输出 描述
paddingValue 输入 DataCopyPad接口填充的数值,数据类型与DataCopyPad接口搬运的数据类型一致。

数据类型

  • Ascend 950PR/Ascend 950DT,支持的数据类型为:bool、int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、complex32、int64_t、uint64_t、double、complex64。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持的数据类型为:int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、int64_t、uint64_t、double。
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持的数据类型为:int8_t、uint8_t、int16_t、uint16_t、half、bfloat16_t、int32_t、uint32_t、float、int64_t、uint64_t、double。

返回值说明

约束说明

调用示例

// 场景1:使用SetPadValue进行自定义填充。
// DataCopyExtParams参数:blockCount=1, blockLen=20*sizeof(half), srcStride=0, dstStride=0, rsv=0。
// DataCopyPadExtParams参数:isPad=false, leftPadding=0, rightPadding=12。
// SetPadValue设置填充值为1,配合isPad=false使用。
AscendC::DataCopyExtParams copyParams{1, srcCols * sizeof(T), 0, 0, 0};
AscendC::DataCopyPadExtParams<T> padParams;
padParams.isPad = false;
padParams.leftPadding = 0;
padParams.rightPadding = dstCols - srcCols;

AscendC::SetPadValue((T)1);
AscendC::DataCopyPad(srcLocal, srcGlobal, copyParams, padParams);

完整样例请参考DataCopyPad样例场景1