已关闭
[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步 #1676
Goldfish_of_Siris创建于 13 天前关闭于 7 天前
13 天前 修改了issue 的描述
13 天前 将 GRJ_XIDUO 设为负责人
GRJ_XIDUO
13 天前 评论:
13 天前 评论:
您好,感谢反馈。
fill兼容性样例中PIPE_MTE1指令和PIPE_MTE2指令之间应该使用多流水同步(SetFlag和WaitFlag),当前使用的PipeBarrier<PIPE_MTE1>()确实是错误用法。
近期会针对样例中同步使用有误的问题全量检查并修复。


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


12 天前 修改了issue 的描述
12 天前 修改标题为 “[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: [工具检测] asc-devkit 仓 fill 样例报 L1 RAW 竞争,定位为 PipeBarrier 流水线类型选择错误(缺 MTE2→MTE1 同步)”
12 天前 修改标题为 “[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: [工具检测] asc-devkit 仓 fill 样例报 L1 RAW 竞争,定位为 PipeBarrier 流水线类型选择错误(缺 MTE2→MTE1 同步)”
12 天前 修改标题为 “[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”
12 天前 修改标题为 “[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题 —— A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”
12 天前 修改标题为 “[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”
12 天前 修改标题为 “[Bug-Report|缺陷反馈][工具检测]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”,原标题为“[Bug-Report|缺陷反馈]: fill 样例在 L1 上有两处问题, A1/B1 地址重叠(实测致结果错误)+ Fill 与 LoadData 之间没同步”
GRJ_XIDUO
12 天前 评论:
12 天前 评论:
您好,感谢反馈。
已确认fill.asc的a1Addr与b1Addr在L1 Buffer的地址存在重叠,近期将会将b1Addr改为M x K x sizeof(T)。


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


GRJ_XIDUO
7 天前 评论:
7 天前 评论:
您好,相关问题已修复。
我们先关闭此issue,如有其他问题,欢迎再提issue交流~


7 天前 issue状态由 待办的 改变为 已完成
7 天前 关闭了 issue
7 天前 添加了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>。