Ascend C矩阵填充接口

Ascend C矩阵填充接口 # Fill【免费下载链接】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。将特定物理存储位置的LocalTensor初始化为某一具体数值。仅支持L1 Buffer/L0A Buffer/L0B Buffer上的LocalTensor初始化。如下图所示将数据空间内最后三行初始化为0配置InitConstValueParams参数initValue0表示初始化值为0repeatTimes5表示按照行方向迭代5次blockNum3表示每次repeat对列方向的3块32Byte数据块清0dstGap5表示相邻repeat之间间隔5个数据块。图1L1 Buffer中Fill示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/Fill_L1.png L1 Buffer中Fill示意图?utm_sourcegitcode_repo_files)如下图所示将内存空间内的值全部初始化为0需要配置InitConstValueParams参数initValue0表示初始化值为0repeatTimes5表示按照行方向迭代5次blockNum2表示每次repeat对列方向的2块512Byte数据块清0dstGap3表示相邻repeat之间间隔3个数据块。图2L0A Buffer中Fill示意图函数原型template typename T, typename U PrimTT, typename Std::enable_ifStd::is_samePrimTT, U::value, bool::type true __aicore__ inline void Fill(const LocalTensorT dst, const InitConstValueParamsU 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/interface/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。参数说明请参考表3。表3InitConstValueParams结构体参数说明参数名称含义repeatTimes迭代次数。默认值为0。取值范围repeatTimes∈[0, 32767]。注repeatTimes 0表示不执行该指令将被视为NOP空操作。blockNum每次迭代初始化的数据块个数取值范围blockNum∈[0, 32767]。默认值为0。注blockNum 0表示不执行该指令将被视为NOP空操作。• dst的物理存储位置为L1 BufferTPosition: A1/B1时每一个block数据块大小是32B• dst的物理存储位置为L0A BufferTPosition: A2/L0B BufferTPosition: B2时每一个block数据块大小是512B。dstGap目的操作数前一个迭代结束地址到后一个迭代起始地址之间的距离。• dst的物理存储位置为L1 BufferTPosition: A1/B1时单位是32B• dst的物理存储位置为L0A BufferTPosition: A2/L0B BufferTPosition: 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 BufferTPosition: A1/B1、L0A BufferTPosition: A2、L0B BufferTPosition: B2。特别针对Ascend 950PR/Ascend 950DT支持物理存储位置为L1 BufferTPosition: A1/B1。如果物理存储位置为L1 BufferTPosition: A1/B1起始地址需要满足32B对齐如果物理存储位置为L0A BufferTPosition: A2、L0B BufferTPosition: B2起始地址需要满足512B对齐。调用示例uint32_t mLength 16; uint32_t kLength 16; Fill(leftMatrix, {1, static_castuint16_t(mLength * kLength * sizeof(float) / 32), 0, 1}); // 给leftMatrix填充mLength * kLength长度的数据为1按32B的颗粒度进行填充若接口用于对L1 Buffer/L0A Buffer/L0B Buffer上的LocalTensor清0使用示例请参考Fill调用样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考