已关闭
[Bug-Report|缺陷反馈]: mhc_pre: TQue 队列深度与 InitBuffer bufferNum 不匹配导致 Double Buffer 失效 #2675
dingxu创建于  5月26日关闭于  6月10日
dingxu
5月26日 创建

Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.

Describe the current behavior / 问题描述 (Mandatory / 必填)

mhc/mhc_pre/op_kernel/arch35/ 中,基类 TQue 模板参数 depth=1,但 InitBuffer 使用 kDoubleBufferCount=2。TQue depth=1 意味着队列最多同时容纳 1 个 tensor,无法实现 Double Buffer 流水线效果,导致分配了双倍 UB 内存但未获得任何性能收益。

代码位置 #1mhc_pre_kernel_base.h 行 658-662:

TQue<QuePosition::VECIN, 1> xInQueue_;
TQue<QuePosition::VECOUT, 1> outQueue_;
// depth=1,队列深度为 1

代码位置 #2mhc_pre_split_bs.h 行 158-159:

pipe_->InitBuffer(xInQueue_, kDoubleBufferCount, kXInQueueBufferBytes);   // bufferNum=2
pipe_->InitBuffer(outQueue_, kDoubleBufferCount, kOutQueueBufferBytes);   // bufferNum=2

问题分析TQue<QuePosition::VECIN, 1> 的队列深度为 1,AllocTensor 在队列满时会阻塞等待。但 InitBuffer 分配了 2 个 buffer(kDoubleBufferCount=2),理论上支持 Double Buffer 流水线(一个 buffer 计算时另一个 buffer 搬运数据)。由于 TQue depth=1 限制了队列深度,Double Buffer 机制完全失效:生产者无法预填第二个 buffer,消费者也看不到预填效果。结果是浪费了一半 UB 空间而没有任何性能提升。

Environment / 环境信息 (Mandatory / 必填)

  • 算子仓:ops-transformer
  • 算子名:MhcPre
  • 涉及文件:mhc/mhc_pre/op_kernel/arch35/mhc_pre_kernel_base.hmhc/mhc_pre/op_kernel/arch35/mhc_pre_split_bs.h
  • 涉及行号:658-662(base)、158-159(split_bs)

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

运行 MhcPre 算子 SPLIT_BS 模式,对比 TQue depth=1 vs depth=2 时的 UB 使用量和算子执行性能。若 depth=2 时性能无提升,说明当前流水线本身不依赖 Double Buffer,则应将 InitBuffer bufferNum 改为 1 以节省 UB 空间。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

评估是否需要 Double Buffer。两种修复路径:

方案A — 若需要 Double Buffer 性能优化,将 TQue depth 改为 2:

// mhc_pre_kernel_base.h
TQue<QuePosition::VECIN, 2> xInQueue_;
TQue<QuePosition::VECOUT, 2> outQueue_;

方案B — 若当前不需要 Double Buffer,将 InitBuffer 的 bufferNum 改为 1,节省 UB 空间:

// mhc_pre_split_bs.h
pipe_->InitBuffer(xInQueue_, 1, kXInQueueBufferBytes);
pipe_->InitBuffer(outQueue_, 1, kOutQueueBufferBytes);

同时需同步更新 CheckUbBufferSize() 中的 UB 用量计算。

Special notes for this issue/备注 (Optional / 选填)

likedislike
huang-chuhong成员
5月26日 评论:

/assign @liweijian16

likedislike
CANN-robotCANN-robot成员
5月26日 将 liweijian16 设为负责人
CANN-robotCANN-robot成员
6月10日 关闭了 issue
CANN-robotCANN-robot成员
6月10日 添加了label:resolved