已关闭
[Bug-Report] swin_attention_ffn: BmmCompute循环变量同名shadow导致外层i被覆盖 #2666
daishuangshuang创建于  5月26日关闭于  6月3日
daishuangshuang
5月26日 创建

一、问题描述(必填)

swin_attention_ffn 算子 Kernel 侧 BmmCompute1BmmCompute2 函数中,外层 for 循环变量 i 与内层 for 循环变量 i 同名,内层 i 会覆盖外层 i 的值。虽然当前逻辑上由 offsetBmm 追踪进度不依赖外层 i,但同名变量遮蔽(variable shadowing)容易引起维护误解,后续修改代码时极易引入 Bug。

二、问题位置

  • 文件:ffn/swin_attention_ffn/op_kernel/swin_attention_ffn.cpp
  • 行号:第 217 行(BmmCompute1)、第 258 行(BmmCompute2)

三、问题代码

BmmCompute1(第 212-217 行):

        mm.SetTensorB(bGlobal);
        mm.SetBias(biasGlobal);

        mm.template Iterate<false>();
        for (int i = 0; i < bmmTiling.singleCoreM / bmmTiling.baseM; i++) {

BmmCompute2(第 253-258 行):

        mm.SetTensorB(bGlobal);
        mm.SetBias(biasGlobal);

        mm.template Iterate<false>();
        for (int i = 0; i < bmmTiling.singleCoreM / bmmTiling.baseM; i++) {

两处均为外层 for (int i = 0; i < loopNum; i++) 内嵌套同名 for (int i = ...)

四、修复建议

将内层循环变量改为不同名称(如 jinnerIdx):

for (int j = 0; j < bmmTiling.singleCoreM / bmmTiling.baseM; j++) {

五、影响范围

当前不影响正确性,但属于代码质量隐患,增加后续维护出错风险。

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

/assign @yolic

likedislike
CANN-robotCANN-robot成员
5月26日 将 yolic 设为负责人
Ddaishuangshuang
5月26日 issue类型由 任务 改变为 缺陷
yuning_chen
yuning_chen成员
5月27日 评论:

您好,感谢您的关注,问题尽快修改合入

likedislike
yuning_chenyuning_chen成员
5月27日 关联了pull request:修改了ffn文件夹下算子的readme,修改了部分dtype描述,增加numhead校验
CANN-robotCANN-robot成员
6月3日 关闭了 issue
CANN-robotCANN-robot成员
6月3日 添加了label:resolved
Ddaishuangshuang
6月8日 issue状态由 待办的 改变为 已完成
CANN-robotCANN-robot成员
6月8日 添加了label:Accepted