WriteSpmBuffer
【免费下载链接】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_tpipe.h"。
将因为UB空间不足而需要溢出暂存的数据拷贝到SPM Buffer中。
函数原型
适用于连续和不连续的数据暂存:
template <typename T> __aicore__ inline void WriteSpmBuffer(const LocalTensor<T>& writeBuffer, const DataCopyParams& copyParams, int32_t writeOffset = 0)适用于连续的数据暂存:
template <typename T> __aicore__ inline void WriteSpmBuffer(const LocalTensor<T>& writeBuffer, const int32_t writeSize, int32_t writeOffset = 0)
参数说明
表1模板参数说明
表2接口参数说明
表3DataCopyParams结构体参数定义
约束说明
- 暂存拷贝到L1时注意writeSize和writeOffset保证32字节对齐。
- 拷贝的内存不要超出初始化的SPM Buffer大小,否则会存在溢出踩踏等问题。
返回值说明
无
调用示例
使用DataCopyParams搬运
AscendC::TPipe pipe; int offset = 32; // 拷贝到SPM Buffer时偏移32字节 AscendC::DataCopyParams copyParams{2, 2, 1, 1}; // 搬运两个数据块,一个数据块的长度为2个datablock,一个datablock为32字节,源地址和目的地址相邻数据块间均间隔一个数据块 // writeLocal为UB上的half类型的LocalTensor pipe.WriteSpmBuffer(writeLocal, copyParams, offset); // 将UB上的数据块搬运到SPM Buffer ... pipe.ReadSpmBuffer(writeLocal, copyParams, offset); // 当UB空间足够时,将暂存在SPM Buffer的数据读回到UB使用writeSize连续搬运
AscendC::TPipe pipe; int dataSize = 32; int offset = 32; // 拷贝到spmBuffer时偏移32字节 ; // writeLocal为UB上的half类型的LocalTensor pipe.WriteSpmBuffer(writeLocal, dataSize, offset); // 将UB上的连续传输数据块搬运到SPM Buffer ... pipe.ReadSpmBuffer(writeLocal, dataSize, offset); // 当UB空间足够时,将暂存在SPM Buffer的数据读回到UB
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考