Closed
[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步 #1676
Goldfish_of_SirisAdd on Sep 16Closed at Sep 22
Sep 16 Modify description of issue
Sep 16 Assign GRJ_XIDUO as responsible person
GRJ_XIDUO
Sep 16 Comments:
Sep 16 Comments:
您好,感谢反馈。
fill兼容性样例中PIPE_MTE1指令和PIPE_MTE2指令之间应该使用多流水同步(SetFlag和WaitFlag),当前使用的PipeBarrier<PIPE_MTE1>()确实是错误用法。
近期会针对样例中同步使用有误的问题全量检查并修复。


Sep 17 Modify description of issue
Goldfish_of_Siris
Sep 17 Comments:
Sep 17 Comments:
你好,关于本issue中提到的另外三个判定为工具能力缺陷的问题,经复核验证确认之前的定位结论有误,该场景为算子确实没加同步,issue文本已经更新,麻烦再确认下


Sep 17 Modify description of issue
Sep 17 Change title to "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: [工具检测] asc-devkit 仓 fill 样例报 L1 RAW 竞争,定位为 PipeBarrier 流水线类型选择错误(缺 MTE2→MTE1 同步)".
Sep 17 Change title to "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: [工具检测] asc-devkit 仓 fill 样例报 L1 RAW 竞争,定位为 PipeBarrier 流水线类型选择错误(缺 MTE2→MTE1 同步)".
Sep 17 Change title to "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步".
Sep 17 Change title to "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步".
Sep 17 Change title to "[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步".
Sep 17 Change title to "[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步", originally titled "[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步".
GRJ_XIDUO
Sep 17 Comments:
Sep 17 Comments:
您好,感谢反馈。
已确认fill.asc的a1Addr与b1Addr在L1 Buffer的地址存在重叠,近期将会将b1Addr改为M x K x sizeof(T)。


Sep 21 Associated pull request
Sep 21 Deleted associated pull request: 修复fill样例,L1 Buffer地址重叠与同步使用错误。
Sep 21 Associated pull request
GRJ_XIDUO
Sep 21 Comments:
Sep 21 Comments:
您好,您指出的两项问题均已完成修复:
(1)已将fill.asc的a1Addr与b1Addr在L1 Buffer的地址重叠问题解决(实测将B矩阵的填充值改为2后,样例依然通过)。
(2)已排查example目录下与Fill(L1 Buffer)相关的跨流水同步问题并修复。
相关PR已合入:


GRJ_XIDUO
Sep 22 Comments:
Sep 22 Comments:
您好,相关问题已修复。
我们先关闭此issue,如有其他问题,欢迎再提issue交流~


Sep 22 changed custom state from 待办的 to 已完成
Sep 22 Close issue
Sep 22 Added label: resolved
Describe the current behavior / 问题描述 (Mandatory / 必填)*
mssanitizer -t racecheck报 5 条 L1 hazard(4 RAW + 1 WAW),对应fill.asc两处问题:①
a1Addr = b1Addr = 0(fill.asc:147-148):A1 与 B1 区间重叠。 A1 占 32KB、B1 占 16KB,B1 整个落在 A1 内 ——InitConstA1写满 A 之后,InitConstB1又把 A 的前 16KB 覆写成 1,A 有一半数据被 B 覆盖。现在看不出来,只因两次Fill都填 1(覆写后值不变);实测把 A 的填充值改成 2:地址 0/0 → 输出192(应256)❌,b1Addr改M*K*sizeof(T)(0x8000)→256✅②
PipeBarrier<PIPE_MTE1>()管不到 MTE2(fill.asc:133):Fill走 MTE2、LoadData走 MTE1,该屏障只保证 MTE1 流水内部的顺序 ⇒ 两者之间实际没有任何同步,LoadData可能在Fill写完前读 L1(读到旧/未初始化数据)。本样例是 AIC 核,编译器不会自动插同步;两条Fill之间(同为 MTE2 且地址又重叠)同样没同步。实测:只错开地址 → 告警 5→2;只补同步 → 5→1;两处都改 → 0。⇒ 两处都要改。
Environment / 环境信息 (Mandatory / 必填)*
Ascend950PR_9579),NPU 3(ASCEND_RT_VISIBLE_DEVICES=3)Ascend-cann-toolkit_9.1.0_linux-x86_64.run+Ascend-cann-950-ops_9.1.0_linux-x86_64.run,自昇腾社区 CANN 下载页 https://www.hiascend.com/developer/download/community/result?module=cann 获取)/ msSanitizer 26.0.0(随 CANN 包提供)/ asc-devkit 9.1.0(dav-3510)ASCFLAGS="-g --cce-enable-sanitizer";cmake -DSCENARIO_NUM=1 -DCMAKE_ASC_ARCHITECTURES=dav-3510 -DCMAKE_ASC_LINK_FLAGS=--cce-enable-sanitizer .. && make -j48;mssanitizer -t racecheck --log-level=error -- ./demoSteps to reproduce the issue / 重现步骤 (Mandatory / 必填)*
source <CANN>/set_env.sh # CANN 9.1.0 export ASCFLAGS="-g --cce-enable-sanitizer" TMPDIR=/tmp ASCEND_RT_VISIBLE_DEVICES=3 SAMPLE=<asc-devkit>/examples/01_simd_cpp_api/06_compatibility_guide/fill cmake -S $SAMPLE -B ./build_058 -DSCENARIO_NUM=1 -DCMAKE_ASC_ARCHITECTURES=dav-3510 -DCMAKE_ASC_LINK_FLAGS=--cce-enable-sanitizer && make -j48 -C ./build_058 cd ./build_058 && mkdir -p output input && python3 $SAMPLE/scripts/gen_data.py && ./demo python3 $SAMPLE/scripts/verify_result.py output/output.bin output/golden.bin # test pass!(掩盖了两处问题) mssanitizer -t racecheck --log-level=error -- ./demo # 5 条告警 # 复现①:把 InitConstA1 中 Fill 第 4 个参数 1→2 重编重跑:地址 0/0 → 192(错);b1Addr 改 0x8000 → 256(对)Describe the expected behavior / 预期结果 (Mandatory / 必填)*
AscendC::PipeBarrier<PIPE_ALL>(); // ① fill.asc:133 补 MTE2→MTE1 同步(或 SetFlag/WaitFlag<AscendC::HardEvent::MTE2_MTE1>(EVENT_ID1)) uint64_t b1Addr = static_cast<uint64_t>(M) * K * sizeof(T); // ② fill.asc:148 B1 避开 A1(0x8000,32B 对齐)修复后:racecheck 告警 5 → 0;把填充值改成 2/1 时输出仍为 256。
Related log / screenshot / 日志 / 截图 (Mandatory / 必填)*
见附件:issue_058_fill_L1同步缺失.zip
Special notes for this issue/备注 (Optional / 选填)
pattern_transformation、data_copy_l1togm、set_loaddata_boundary、data_copy_l0c2gm)都错开了b1Addr,扫网 racecheck 全通过,只有本样例重叠;建议顺带排查其它手动寻址 L1(TPosition::A1/B1/C1)的样例/算子是否存在同址、跨流水依赖是否被写成PipeBarrier<PIPE_MTE1>。