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


5月26日 将 liweijian16 设为负责人
6月10日 关闭了 issue
6月10日 添加了label:resolved
/assign @liweijian16


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 内存但未获得任何性能收益。代码位置 #1 —
mhc_pre_kernel_base.h行 658-662:TQue<QuePosition::VECIN, 1> xInQueue_; TQue<QuePosition::VECOUT, 1> outQueue_; // depth=1,队列深度为 1代码位置 #2 —
mhc_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 / 必填)
mhc/mhc_pre/op_kernel/arch35/mhc_pre_kernel_base.h、mhc/mhc_pre/op_kernel/arch35/mhc_pre_split_bs.hSteps 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 用量计算。Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
无
Special notes for this issue/备注 (Optional / 选填)