下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

ReadSpmBuffer

功能说明

从SPM Buffer读回到local数据中。

SPM Buffer的具体介绍和完整使用样例请参考SPM Buffer

函数原型

  • 适用于连续和不连续的数据回读:
    1
    2
    template <typename T>
    __aicore__ inline void ReadSpmBuffer(const LocalTensor<T>& readLocal, const DataCopyParams& copyParams, int32_t readOffset = 0)
    
  • 适用于连续的数据回读:
    1
    2
    template <typename T>
    __aicore__ inline void ReadSpmBuffer(const LocalTensor<T>& readLocal, const int32_t readSize, int32_t readOffset = 0)
    

参数说明

表1 接口参数说明

参数名称

输入/输出

含义

readLocal

输入

读回的目标local内存。

copyParams

输入

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

readSize

输入

读回的元素个数。

readoffset

输入

SPM Buffer的偏移,单位为字节。

表2 DataCopyParams结构体参数定义

参数名称

含义

blockCount

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

blockLen

指定该指令每个连续传输数据块长度,单位为datablock(32Bytes)。取值范围:blockLen∈[1, 65535]。

特别的,当dstLocal位于C2PIPE2GM时,单位为128B;当dstLocal位于C2时,单位为64B。

srcStride

源操作数,相邻连续数据块的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32Bytes)。数据类型为uint16_t,srcStride不要超出该数据类型的取值范围。

dstStride

目的操作数,相邻连续数据块间的间隔(前面一个数据块的尾与后面数据块的头的间隔),单位为datablock(32Bytes)。数据类型为uint16_t,dstStride不要超出该数据类型的取值范围。

特别的,当dstLocal位于C2PIPE2GM时,单位为128B;当dstLocal位于C2时,单位为64B。

支持的型号

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

注意事项

返回值

调用示例

1
2
3
4
5
6
7
8
AscendC::TPipe pipe;
AscendC::TQue<AscendC::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));
AscendC::LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>();
AscendC::DataCopyParams copyParams{1, 2, 0, 0};// 搬运一个连续传输数据块,连续传输数据块的长度为2个datablock,一个datablock32bytes
pipe.ReadSpmBuffer(writeLocal, copyParams, offset);
1
2
3
4
5
6
7
AscendC::TPipe pipe;
AscendC::TQue<AscendC::QuePosition::VECIN, 1> inQueueSrcVecIn;
int dataSize = 64; // 从ub上申请一块内存64*sizeof(half)字节
int offset = 32; // 读回时在spmBuffer上偏移32字节
pipe.InitBuffer(inQueueSrcVecIn, 1, dataSize * sizeof(half));
AscendC::LocalTensor<half> writeLocal = inQueueSrcVecIn.AllocTensor<half>();
pipe.ReadSpmBuffer(writeLocal, dataSize, offset);
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词