ReadSpmBuffer
函数原型
- 适用于连续和不连续的数据回读:
      template <typename T> __aicore__ inline void ReadSpmBuffer(const LocalTensor<T>& readLocal, const DataCopyParams& copyParams, int readOffset = 0) 
- 适用于连续的数据回读:
     template <typename T> __aicore__ inline void ReadSpmBuffer(const LocalTensor<T>& readLocal, const int readSize, int readOffset = 0) 
参数说明
| 参数名称 | 输入/输出 | 含义 | 
|---|---|---|
| readLocal | 输入 | 读回的目标local内存。 | 
| copyParams | 输入 | 搬运参数,DataCopyParams类型,DataCopyParams结构定义请参考表2。 | 
| readSize | 输入 | 读回的元素个数。 | 
| readoffset | 输入 | SPM Buffer的偏移,单位为字节。 | 
| 参数名称 | 含义 | 
|---|---|
| blockCount | 指定该指令包含的连续传输数据块个数,取值范围:blockCount∈[1, 4095]。 | 
| blockLen | 指定该指令每个连续传输数据块长度,单位为datablock(32Bytes)。取值范围:blockLen∈[1, 65535]。 特别的,当dstLocal位于C2PIPE2GM时,单位为128B;当dstLocal位于C2时,单位为64B。 | 
| srcStride | 源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32Bytes)。 | 
| dstStride | 目的操作数,相邻连续数据块间的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32Bytes)。 特别的,当dstLocal位于C2PIPE2GM时,单位为128B;当dstLocal位于C2时,单位为64B。 | 
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas A2训练系列产品/Atlas 800I 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};// 搬运一个连续传输数据块,连续传输数据块的长度为2个datablock,一个datablock32bytes
pipe.ReadSpmBuffer(writeLocal, copyParams, offset);TPipe pipe; TQue<QuePosition::VECIN, 1> inQueueSrcVecIn; int dataSize = 64; // 从ub上申请一块内存64*sizeof(half)字节 int offset = 32; // 读回时在spmBuffer上偏移32字节 pipe.InitBuffer(inQueueSrcVecIn, 1, dataSize * sizeof(half)); LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>(); pipe.ReadSpmBuffer(writeLocal, dataSize, offset);
     父主题: SPM Buffer