WriteSpmBuffer

功能说明

将需要溢出的内存拷贝到SPM Buffer中。

定义原型

template <typename T> __aicore__ inline void WriteSpmBuffer(const LocalTensor<T>& writeLocal, const DataCopyParams& copyParams, int writeOffset = 0)
template <typename T> __aicore__ inline void WriteSpmBuffer((const LocalTensor<T>& writeLocal, const int writeSize,
int writeOffset = 0)

参数说明

表1 接口参数说明

参数名称

输入/输出

含义

writeLocal

输入

需要溢出的Local内存

copyParams

输入

搬运参数,DataCopyParams类型,DataCopyParams结构定义请参考表2

writeSize

输入

拷贝的内存大小

writeoffset

输入

溢出到SPM Buffer的偏移

表2 DataCopyParams结构体参数定义

参数名称

含义

blockCount

指定该指令包含的连续传输数据块个数,取值范围:blockCount∈[1, 4095]。

blockLen

指定该指令每个连续传输数据块长度,取值范围:blockLen∈[1, 65535]。

srcStride

源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔)。

dstStride

目的操作数,相邻连续数据块间的间隔(前面一个数据块的尾与后面数据块的头的间隔)。

支持的型号

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas A2训练系列产品

注意事项

返回值

调用示例

TPipe pipe;
TQue<QuePosition::VECIN, 1> inQueueSrcVecIn;
int dataSize = 32; // 假设T为half类型,从ub上申请一块内存32 * sizeof(half)字节
int offset = 32; // 拷贝到spmBuffer时偏移32字节
pipe.InitBuffer(inQueueSrcVecIn, 1, dataSize * sizeof(half));
LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>();
DataCopyParams copyParams{1, 2, 0, 0}; // 从ub上搬运一块长度为2个block的数据,一个block32byte
pipe.WriteSpmBuffer(writeLocal, copyParams, offset);

TPipe pipe;
TQue<QuePosition::VECIN, 1> inQueueSrcVecIn;
int dataSize = 32; // 假设T为half类型,从ub上申请一块内存32 * sizeof(half)字节
int offset = 32; // 拷贝到spmBuffer时偏移32字节
pipe.InitBuffer(inQueueSrcVecIn, 1, dataSize * sizeof(half));
LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>();
pipe.WriteSpmBuffer(writeLocal, dataSize, offset);