Init
功能说明
初始化内存和用于同步流水事件的EventID的初始化。
函数原型
1
|
__aicore__ inline void TPipe::Init() |
支持的型号
Atlas 训练系列产品
Atlas推理系列产品AI Core
Atlas推理系列产品Vector Core
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas 200/500 A2推理产品
注意事项
重复申请释放tpipe,要与Destroy接口成对使用,tpipe如果要重复申请需要先Destroy释放后再Init。
返回值
无
调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
template <typename srcType> class KernelAsin { public: __aicore__ inline KernelAsin() {} __aicore__ inline void Init(GM_ADDR src_gm, GM_ADDR dst_gm, uint32_t srcSize, TPipe *pipe) { src_global.SetGlobalBuffer(reinterpret_cast<__gm__ srcType *>(src_gm), srcSize); dst_global.SetGlobalBuffer(reinterpret_cast<__gm__ srcType *>(dst_gm), srcSize); pipe->InitBuffer(inQueueX, 1, srcSize * sizeof(srcType)); pipe->InitBuffer(outQueue, 1, srcSize * sizeof(srcType)); bufferSize = srcSize; } __aicore__ inline void Process() { CopyIn(); Compute(); CopyOut(); } private: __aicore__ inline void CopyIn() { AscendC::LocalTensor<srcType> srcLocal = inQueueX.AllocTensor<srcType>(); AscendC::DataCopy(srcLocal, src_global, bufferSize); inQueueX.EnQue(srcLocal); } __aicore__ inline void Compute() { AscendC::LocalTensor<srcType> dstLocal = outQueue.AllocTensor<srcType>(); AscendC::LocalTensor<srcType> srcLocal = inQueueX.DeQue<srcType>(); int16_t scalar_value = 3; AscendC::Muls(dstLocal, srcLocal, (srcType)scalar_value, bufferSize); outQueue.EnQue<srcType>(dstLocal); inQueueX.FreeTensor(srcLocal); } __aicore__ inline void CopyOut(uint32_t offset) { AscendC::LocalTensor<srcType> dstLocal = outQueue.DeQue<srcType>(); AscendC::DataCopy(dst_global, dstLocal, bufferSize); outQueue.FreeTensor(dstLocal); } private: AscendC::GlobalTensor<srcType> src_global; AscendC::GlobalTensor<srcType> dst_global; AscendC::TQue<AscendC::QuePosition::VECIN, 1> inQueueX; AscendC::TQue<AscendC::QuePosition::VECOUT, 1> outQueue; uint32_t bufferSize = 0; }; template <typename dataType> __aicore__ void kernel_Test_operator(GM_ADDR src_gm, GM_ADDR dst_gm, uint32_t srcSize) { KernelAsin<dataType> op; AscendC::TPipe pipeIn; for (uint32_t index =0; index < 1; index++) { if (index != 0) { pipeIn.Init(); } op.Process(); pipeIn.Destroy(); AscendC::TPipe pipeCast; op.Init(src_gm, dst_gm, srcSize, &pipeCast); op.Process(); pipeCast.Destroy(); } } |
父主题: TPipe