已关闭
[Question|问题咨询]: 为什么 For 循环中调用 DataCopy,需要加MTE3 同步呢? #481
see55创建于  4月16日关闭于  4月17日
see55
see55
4月16日 创建

Welcome to ask questions and discuss with other members.

问题描述

https://gitcode.com/cann/asc-devkit/blob/master/impl/adv_api/detail/matmul/stage/copy_cube_out/copy_cube_out_datacopy_wrapper.h#L405
CopyTrans2GMByVecByLineAlign函数中代码
for (int32_t i = 0; i < baseHeight; ++i) {
DataCopy(gm[dstOffset], trans[srcOffset], {1, static_cast<uint16_t>(blockLen), 0, 0});
PipeBarrier<PIPE_MTE3>();
dstOffset += offset;
srcOffset += blockOffset;
}
为什么要加一句PipeBarrier<PIPE_MTE3>()同步呢?每次拷贝的 gm 地址和 trans 地址都是不同的,没有重复的地址。这里多次 DataCopy 的指令是不存在相互冲突的问题的,为什么也要加PipeBarrier<PIPE_MTE3>()同步呢?

likedislike
LLycheeeee成员
4月16日 将 TommyLike 设为负责人
LLycheeeee成员
4月16日 移除了负责人 TommyLike
LLycheeeee成员
4月16日 将 pandeng01 设为负责人
pandengpandeng成员
4月17日 关联了pull request:delete useless PipeBarrier
pandeng
pandeng成员
4月17日 评论:

@see55 你好,感谢你的关注,经过验证证明此处代码并没有加同步的必要,相关代码已经修改,如果没有其他问题这边先关闭issue了。

likedislike
pandengpandeng成员
4月17日 issue状态由 进行中 改变为 已完成
pandengpandeng成员
4月17日 关闭了 issue
CANN-robotCANN-robot成员
4月17日 添加了label:Accepted
CANN-robotCANN-robot成员
4月17日 添加了label:resolved