Mmad和fixpipe的unitflag参数怎么用
收藏回复举报
Mmad和fixpipe的unitflag参数怎么用
t('forum.solved') 已解决
发表于2024-09-07 12:07:12
0 查看

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);
}

我要发帖子