华为计算微信公众号
昇腾AI开发者公众号
华为计算微博
华为计算今日头条
Matmul里的unitflag可以让计算和搬运流水并行,Mmad和Fixpipe也分别有unitFlag参数,但是是预留参数,我是否可以通过设置unitFlag来实现Mmad计算和Fixpipe搬运的并行。下面是计算和搬运的代码。
__aicore__ inline void Compute(int first, const LocalTensor<T> &c1Local) { LocalTensor<T> a2Local = inQueueA2.DeQue<T>(); LocalTensor<T> b2Local = inQueueB2.DeQue<T>(); MmadParams mmadParams; mmadParams.m = baseM; mmadParams.n = baseN; mmadParams.k = baseK; // mmadParams.unitFlag = 1; if (first) { Mmad(c1Local, a2Local, b2Local, mmadParams); } else { mmadParams.cmatrixInitVal = false; Mmad(c1Local, a2Local, b2Local, c1Local, mmadParams); } inQueueA2.FreeTensor(a2Local); inQueueB2.FreeTensor(b2Local); } __aicore__ inline void CopyOut(const LocalTensor<T> &c1Local, int offsetC_1) { event_t eventIDMToFIX = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::M_FIX)); SetFlag<HardEvent::M_FIX>(eventIDMToFIX); WaitFlag<HardEvent::M_FIX>(eventIDMToFIX); FixpipeParamsV220 fixpipeParams; fixpipeParams.nSize = baseN; fixpipeParams.mSize = baseM; fixpipeParams.srcStride = baseM; fixpipeParams.dstStride = N; // fixpipeParams.unitFlag = 1; fixpipeParams.ndNum = 1; fixpipeParams.srcNdStride = 0; fixpipeParams.dstNdStride = 0; Fixpipe(cGlobal[offsetC_1], c1Local, fixpipeParams); event_t eventIDFIXToM = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::FIX_M)); SetFlag<HardEvent::FIX_M>(eventIDFIXToM); WaitFlag<HardEvent::FIX_M>(eventIDFIXToM); }
我要发帖子
Matmul里的unitflag可以让计算和搬运流水并行,Mmad和Fixpipe也分别有unitFlag参数,但是是预留参数,我是否可以通过设置unitFlag来实现Mmad计算和Fixpipe搬运的并行。下面是计算和搬运的代码。
__aicore__ inline void Compute(int first, const LocalTensor<T> &c1Local) { LocalTensor<T> a2Local = inQueueA2.DeQue<T>(); LocalTensor<T> b2Local = inQueueB2.DeQue<T>(); MmadParams mmadParams; mmadParams.m = baseM; mmadParams.n = baseN; mmadParams.k = baseK; // mmadParams.unitFlag = 1; if (first) { Mmad(c1Local, a2Local, b2Local, mmadParams); } else { mmadParams.cmatrixInitVal = false; Mmad(c1Local, a2Local, b2Local, c1Local, mmadParams); } inQueueA2.FreeTensor(a2Local); inQueueB2.FreeTensor(b2Local); } __aicore__ inline void CopyOut(const LocalTensor<T> &c1Local, int offsetC_1) { event_t eventIDMToFIX = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::M_FIX)); SetFlag<HardEvent::M_FIX>(eventIDMToFIX); WaitFlag<HardEvent::M_FIX>(eventIDMToFIX); FixpipeParamsV220 fixpipeParams; fixpipeParams.nSize = baseN; fixpipeParams.mSize = baseM; fixpipeParams.srcStride = baseM; fixpipeParams.dstStride = N; // fixpipeParams.unitFlag = 1; fixpipeParams.ndNum = 1; fixpipeParams.srcNdStride = 0; fixpipeParams.dstNdStride = 0; Fixpipe(cGlobal[offsetC_1], c1Local, fixpipeParams); event_t eventIDFIXToM = static_cast<event_t>(GetTPipePtr()->FetchEventID(HardEvent::FIX_M)); SetFlag<HardEvent::FIX_M>(eventIDFIXToM); WaitFlag<HardEvent::FIX_M>(eventIDFIXToM); }