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


5月26日 将 yolic 设为负责人
5月26日 issue类型由 任务 改变为 缺陷
yuning_chen
5月27日 评论:
5月27日 评论:
您好,感谢您的关注,问题尽快修改合入


5月27日 关联了pull request:修改了ffn文件夹下算子的readme,修改了部分dtype描述,增加numhead校验
6月3日 关闭了 issue
6月3日 添加了label:resolved
6月8日 issue状态由 待办的 改变为 已完成
6月8日 添加了label:Accepted
一、问题描述(必填)
swin_attention_ffn算子 Kernel 侧BmmCompute1和BmmCompute2函数中,外层 for 循环变量i与内层 for 循环变量i同名,内层i会覆盖外层i的值。虽然当前逻辑上由offsetBmm追踪进度不依赖外层i,但同名变量遮蔽(variable shadowing)容易引起维护误解,后续修改代码时极易引入 Bug。二、问题位置
ffn/swin_attention_ffn/op_kernel/swin_attention_ffn.cpp三、问题代码
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 = ...)。四、修复建议
将内层循环变量改为不同名称(如
j或innerIdx):for (int j = 0; j < bmmTiling.singleCoreM / bmmTiling.baseM; j++) {五、影响范围
当前不影响正确性,但属于代码质量隐患,增加后续维护出错风险。