feat: Add async comm ops and emitc lowering#349
feat: Add async comm ops and emitc lowering#349FangRui0 wants to merge 1 commit intohw-native-sys:mainfrom
Conversation
f396b1e to
a520648
Compare
|
/run a3 |
Codex Review该评论由 review 机器人自动更新。
Summary发现 2 个 P1 和 1 个 P2:async 传输缺少元素类型约束会静默错降为 float,session 的 scratch 生命周期没有被 plan-memory 保活,test_async_event 的副作用建模会让 CSE 折叠重复轮询。 Findings
这里的 verifier 只检查了 src/dst 元素类型相同和形状一致,没有限制元素类型必须能被 GlobalTensor lowering 支持。后面的 EmitC lowering 会调用 getElemTypeStringForGT();它对未支持类型直接回退到 "float"。因此像 memref<128xi1>、memref<128xi24> 这类输入会通过校验,但最终生成的是 GlobalTensor<float,...>,传输字节数和元素语义都会错,属于实质性误编译。
PlanMemory 现在把 BuildAsyncSessionOp / TPutAsyncOp / TGetAsyncOp 当成只使用“直接操作数”的普通 op 处理,但 session 结果并没有和 scratch memref 建立 alias/liveness 关系。这样在 pto.alloc_tile 先被降成 memref 之后,如果后面只继续使用 session SSA 值,scratch buffer 就会在 build_async_session 之后被判死并复用。EmitC lowering 又把 scratch 真正塞进了 session 里,后续 async DMA 只拿 session 工作,所以在默认的非 Level3 构建里,这会把 session 背后的本地 scratch 提前覆盖掉,直接破坏运行时正确性。
TestAsyncEventOp::getEffects() 只声明读取 event/session,并把结果当成普通 SSA 产物写出。默认流水线在 lowering 前仍然运行 createCSEPass(),因此两个对同一 event/session 的 test_async_event 在中间没有“写入”时,会被优化器视为等价表达式并复用第一次结果。异步事件的完成状态会随时间推进而变化,并不需要任何 IR 可见的写入,所以这种副作用建模对轮询场景是不成立的。 |
A3 板测失败
失败用例
|
A3 板测失败详情:PR #349async_comm
|
|
/run a3 |
|
/run a3 |
1 similar comment
|
/run a3 |
A3 板测失败
失败用例
|
A3 板测失败详情:PR #349lrelu
log
async_comm
|
|
/run a3 |
A3 板测失败
失败用例
|
A3 板测失败详情:PR #349rowsum
|
A3 板测失败
失败用例
|
A3 板测失败详情:PR #349test_inject_sync_two_event_id
shls
partmax
ors
|
A3 板测失败
失败用例
|
A3 板测失败详情:PR #349recip
paged_attention_example_kernel_softmax_prepare
|
No description provided.