Skip to content

Fix TPut release fence before TNotify#873

Open
TaoTao-real wants to merge 31 commits into
hw-native-sys:mainfrom
TaoTao-real:codex/fix-issue872-tput-tnotify-release
Open

Fix TPut release fence before TNotify#873
TaoTao-real wants to merge 31 commits into
hw-native-sys:mainfrom
TaoTao-real:codex/fix-issue872-tput-tnotify-release

Conversation

@TaoTao-real

@TaoTao-real TaoTao-real commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Design Document

  • docs/designs/ptoas-memory-consistency-design.md records the memory-consistency contract, PyPTO emission patterns, EmitC lowering support, and current VPTO fail-fast boundary.

Summary

  • Add an independent pto-memory-consistency Module pass that validates release/acquire memory-consistency contracts before backend lowering.
  • Expose explicit memory-consistency semantic ops:
    • pto.cmo.clean all #pto.address_space<gm>: GM cache clean.
    • pto.cmo.invalidate all #pto.address_space<gm>: GM cache invalidate.
    • pto.fence.release #pto.fence_scope<ddr>: DDR-domain release fence.
    • pto.fence.acquire #pto.fence_scope<ddr>: DDR-domain acquire fence.
  • EmitC lowering supports these semantic ops today:
    • clean -> dcci((__gm__ void*)0, ENTIRE_DATA_CACHE, CACHELINE_OUT)
    • invalidate -> dcci((__gm__ void*)0, ENTIRE_DATA_CACHE)
    • DDR fence -> dsb(DSB_DDR)
  • VPTO lowering now has explicit fail-fast stubs for these semantic ops. PTOAS reports that VPTO still needs a confirmed DSB/DCCI intrinsic ABI instead of silently leaving unsupported ops in backend IR.
  • PTOAS does not auto-insert dcci or dsb; missing or misordered explicit CMO/fence operations are reported as compile-time errors.
  • PTOAS does derive low-level pipe drains from pending pipe state. When pto.fence.release #pto.fence_scope<ddr> follows pending GM writes on MTE3 or FIX, PTOAS inserts the matching pto.barrier immediately before the release fence, so EmitC produces pipe_barrier(<producer pipe>); dsb(DSB_DDR); TNOTIFY.
  • SyncMacroModel is used to recognize macro-op MTE3 phases, so pto.comm.tput and other comm macro GM-store phases are validated before TNotify.

Fixes #872.

PyPTO Contract

  • PyPTO should not manually insert pto.barrier #pto.pipe<PIPE_MTE3> or pto.barrier #pto.pipe<PIPE_FIX> for TStore, TStoreFP, or TPUT publish paths. It should emit the semantic boundary:
    • pto.tstore or pto.comm.tput
    • pto.fence.release #pto.fence_scope<ddr>
    • pto.comm.tnotify
  • PTOAS inserts the required MTE3 or FIX drain before that release fence when pending GM write work exists.
  • For cacheable scalar GM stores, PyPTO needs to emit pto.cmo.clean all #pto.address_space<gm> before pto.fence.release #pto.fence_scope<ddr>.
  • For scalar GM payload reads after TWait or successful TTest, PyPTO needs to emit pto.cmo.invalidate all #pto.address_space<gm> before pto.load_scalar.
  • Helpers that contain payload memory access, CMO, fence, TNotify, TWait, or TTest must be inlined before pto-memory-consistency. pto.entry launcher calls to kernels are allowed.

Covered Scenarios

  • direct MTE3 payload producer before TNotify: requires explicit pto.fence.release #pto.fence_scope<ddr>; PTOAS auto-inserts MTE3 pipe drain before the fence
  • direct FIX GM payload producer before TNotify, such as ACC TStore or TStoreFP: requires explicit pto.fence.release #pto.fence_scope<ddr>; PTOAS auto-inserts FIX pipe drain before the fence
  • direct MTE2 work before TNotify: still emits only pipe_barrier(PIPE_MTE2), no DDR fence
  • existing MTE3, FIX, or PIPE_ALL barrier before TNotify: requires explicit pto.fence.release #pto.fence_scope<ddr> and does not duplicate pipe drains
  • TPUT -> TNotify: TPUT is recognized through macro modeling and must be followed by explicit DDR release fence before signal publish; PTOAS supplies the MTE3 drain
  • TBroadcast -> TNotify: guards the generic SyncMacroModel MTE3 phase path, not just a TPUT special case
  • cacheable scalar GM store before TNotify: requires explicit clean plus DDR release fence before signal publish
  • TWait/TTest -> load_scalar: requires explicit acquire invalidate before scalar GM payload read
  • dirty scalar GM store before acquire: requires explicit clean, release fence, then invalidate
  • invalid or missing memory-consistency actions produce diagnostics in memory_consistency_invalid.pto
  • VPTO backend rejects pto.cmo.* and pto.fence.* with clear unsupported-lowering diagnostics until VPTO/Bisheng exposes the DSB/DCCI ABI PTOAS should call

Tests

  • git diff --check hw-native-sys/main...HEAD
  • local LLVM21 build configure with /Users/lishengtao/Documents/PTO/llvm-workspace/llvm-project-21/build-shared
  • ninja -C build-pr873-ci obj.PTOTransforms
  • ninja -C build-pr873-ci ptoas
  • targeted prior-CI-failure lit subset: 9/9 passed
  • memory consistency lit subset: 8/8 passed
  • full local check-pto: 773/779 passed; the remaining 6 fail in TileLang template import because the local CMake used Python 3.9 and current TileLang templates use Python 3.10 union type syntax such as str | None. These failures are unrelated to this PR and are expected to be covered by GitHub CI's Python 3.11 environment.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the TNotify release analysis to track pipe drains and DDR-domain release fences independently using a new TNotifyReleaseState struct instead of a simple bitmask. This ensures that internal stores from operations like pto::TPutOp are properly drained and made DDR-visible before a notification signal is published, even if a pipe barrier is already present. The review feedback suggests improving the precision of the analysis in multi-block regions by operating on specific Regions rather than the parent Operation to avoid overly conservative barrier insertions, and adding a check to skip external function declarations in annotateTNotifyRelease to prevent potential crashes when calling getBody() on functions without a body.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread lib/PTO/Transforms/PTOToEmitC.cpp Outdated
Comment on lines +400 to +404
TNotifyReleaseState regionState = collectTNotifyReleaseState(&op);
TNotifyReleaseState nestedNotifyState = regionEntryState;
nestedNotifyState.merge(nestedLoopCarriedState);
nestedNotifyState.merge(regionState);
markNestedTNotifyWithState(&op, nestedNotifyState);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

In multi-block regions, calling collectTNotifyReleaseState(&op) and markNestedTNotifyWithState(&op, ...) on the parent operation op instead of the specific region causes the analysis to be overly conservative. If an operation has multiple regions (such as scf::IfOp with then and else branches), a multi-block structure in one branch will conservatively collect and apply the release state to both branches, potentially leading to redundant barriers/fences.\n\nWe can improve precision by overloading collectTNotifyReleaseState and markNestedTNotifyWithState to operate directly on Region & instead of Operation *:\n\ncpp\nstatic TNotifyReleaseState collectTNotifyReleaseState(Region &region) {\n TNotifyReleaseState state;\n for (Block &block : region)\n for (Operation &nested : block)\n state.merge(collectTNotifyReleaseState(&nested));\n return state;\n}\n\nstatic void markNestedTNotifyWithState(Region &region,\n const TNotifyReleaseState &state) {\n region.walk(\n [&](pto::TNotifyOp notify) { setTNotifyReleaseAttrs(notify, state); });\n}\n

        TNotifyReleaseState regionState = collectTNotifyReleaseState(region);\n        TNotifyReleaseState nestedNotifyState = regionEntryState;\n        nestedNotifyState.merge(nestedLoopCarriedState);\n        nestedNotifyState.merge(regionState);\n        markNestedTNotifyWithState(region, nestedNotifyState);

Comment thread lib/PTO/Transforms/PTOToEmitC.cpp Outdated
Comment on lines 420 to 421
for (auto func : module.getOps<func::FuncOp>()) {
if (func.getBody().hasOneBlock()) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

If the module contains external function declarations (which have empty bodies), calling func.getBody().hasOneBlock() might be unsafe or lead to unnecessary processing. It is a standard best practice in MLIR passes to explicitly skip function declarations early.

  for (auto func : module.getOps<func::FuncOp>()) {\n    if (func.isDeclaration())\n      continue;\n    if (func.getBody().hasOneBlock()) {

@TaoTao-real TaoTao-real force-pushed the codex/fix-issue872-tput-tnotify-release branch 5 times, most recently from 6d92cfc to ad97aef Compare June 29, 2026 02:31
@reedhecre

reedhecre commented Jun 29, 2026

Copy link
Copy Markdown

Codex Review

该评论由 review 机器人自动更新。

  • PR: Fix TPut release fence before TNotify #873 Fix TPut release fence before TNotify
  • Author: TaoTao-real
  • Base/Head: main / codex/fix-issue872-tput-tnotify-release
  • Head SHA: 31d39f269ef6
  • Trigger: PR 有新提交
  • Generated At: 2026-07-08T07:05:43Z
  • Previous Head SHA: 86a9f9d77f81
  • Status: failed at codex-review (exit=1)

Summary

Review failed at stage codex-review: exit=1

Findings

未生成结构化 findings,因为 review 过程提前失败。

Log Tail

 python/pto/dialects/pto.py                         |  22 +
 .../pto/cmo_cacheinvalid_single_line_invalid.pto   |  19 +
 test/lit/pto/comm_p2p_emitc.pto                    |   1 +
 test/lit/pto/issue696_scalar_gm_store_flush.pto    |  10 +-
 test/lit/pto/issue711_tnotify_mte_drain.pto        | 146 +++-
 test/lit/pto/issue872_tput_tnotify_release.pto     | 173 ++++
 test/lit/pto/memory_consistency_external_func.pto  |  37 +
 test/lit/pto/memory_consistency_invalid.pto        | 103 +++
 test/lit/pto/memory_consistency_loop_release.pto   |  88 ++
 .../memory_consistency_noninline_call_invalid.pto  |  61 ++
 test/lit/pto/signal_payload_cache_consistency.pto  | 513 ++++++++++++
 test/lit/pto/tnotify_release_local_ops.pto         |  79 ++
 .../vpto/memory_consistency_cmo_unsupported.pto    |  21 +
 .../vpto/memory_consistency_fence_unsupported.pto  |  21 +
 test/python/memory_consistency_bindings.py         |  64 ++
 test/samples/CommSync/comm_p2p.py                  |   1 +
 test/samples/CommSync/comm_p2p_binding_variants.py |   1 +
 tools/ptoas/ptoas.cpp                              |   3 +-
 tools/ptobc/src/mlir_encode.cpp                    |   3 +
 .../testdata/aiv_subblockid_pipe_v0_roundtrip.pto  | 107 +--
 36 files changed, 3077 insertions(+), 225 deletions(-)
===== END STAGE clone rc=0 @ 2026-07-08 15:05:35 =====

===== STAGE codex-review @ 2026-07-08 15:05:35 =====
set -euo pipefail
cd '/tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/repo'
'codex' exec -C '/tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/repo' -s read-only -c 'model_provider="codereview"' -c 'model="gpt-5.4"' -c 'model_reasoning_effort="xhigh"' --output-schema '/tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/review_schema.json' -o '/tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/codex_last_message.json' --color never - < '/tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/review_prompt.txt'
[monitor] stage timeout: 1800s
OpenAI Codex v0.115.0 (research preview)
--------
workdir: /tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/repo
model: gpt-5.4
provider: codereview
approval: never
sandbox: read-only
reasoning effort: xhigh
reasoning summaries: none
session id: 019f408b-dddb-7d41-b8ee-0ca1524a3303
--------
user
你现在在审查 GitHub PR。

仓库:hw-native-sys/PTOAS
PR:#873 Fix TPut release fence before TNotify
作者:TaoTao-real
base branch:origin/main
head branch:HEAD(当前已 checkout 到 PR head)

要求:
1. 只审查这个 PR 相对 origin/main 的改动,必要时可以看上下文文件。
2. 重点找真实的 correctness / regression / contract mismatch / CI / runtime / compatibility 问题。
3. 不要提纯风格建议,不要提低价值猜测。
4. 严格按优先级输出:
   - P1:高概率会导致错误结果、编译/运行失败、严重回归、发布阻断
   - P2:重要缺陷、行为回归、遗漏校验/测试、较大兼容性问题
   - P3:次要但明确可改的问题
5. 如果没有问题,summary 直接写:未检查到 PR #873 存在问题,并返回 findings=[]。
6. 如果有问题,summary 简洁概括,findings 里每条都要给出:
   - severity
   - title
   - body(说明为什么是问题,尽量具体)
   - file(尽量给相对路径)
   - line(能确定就填整数,否则 null)

建议先查看:
- git status --short
- git diff --stat origin/main...HEAD
- git diff --unified=80 origin/main...HEAD

最终输出必须严格匹配 JSON schema。

mcp startup: no servers
Reconnecting... 1/5 (unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3dd10a29531e-LAX, request id: 03fd1173-0a94-4a5c-a02a-ab31a9a15e52)
Reconnecting... 2/5 (unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3dd3fb390add-LAS, request id: f758d174-34e6-494d-86b3-abfa17669bbc)
Reconnecting... 3/5 (unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3dd83a8f5f10-LAS, request id: f69b6372-7762-4734-a432-57b49f1d561a)
Reconnecting... 4/5 (unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3ddefa48b142-LAS, request id: 0c4fccf1-d3c0-443d-a355-80f83387c62a)
Reconnecting... 5/5 (unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3de98b3d2779-LAX, request id: 1f93ce04-2a71-4cce-a7e0-d74790dfac6e)
ERROR: unexpected status 403 Forbidden: {"code":"INSUFFICIENT_BALANCE","message":"Insufficient account balance"}, url: https://codex.0u0o.com/responses, cf-ray: a17d3dfe0b7609f3-LAS, request id: 7a1fb803-0a05-456e-94cb-2b252ceebe9c
Warning: no last agent message; wrote empty content to /tmp/ptoas-pr-review-monitor/runs/20260708_150527_pr873/codex_last_message.json
===== END STAGE codex-review rc=1 @ 2026-07-08 15:05:43 =====

@TaoTao-real TaoTao-real force-pushed the codex/fix-issue872-tput-tnotify-release branch 2 times, most recently from bcf801c to f96297f Compare June 30, 2026 07:37
@TaoTao-real

Copy link
Copy Markdown
Contributor Author

Update for PR1 hardening:

  • Removed the broad release fallback that classified every OpPipeInterface MTE3 op as a GM payload publish.
  • TNotify release detection is now payload-specific: TLoad/TPrefetch only request MTE2 drain, TStore MTE3/FIX and TStoreFP request release-side GM write handling, scalar GM stores require explicit CMO+fence, and macro MTE3 phases still cover TPUT/TBroadcast publish paths.
  • Added test/lit/pto/tnotify_release_local_ops.pto to guard local A5 TInsert MTE3 and local TMov FIX before TNotify; neither should require DDR release nor emit release drains.
  • Updated the design doc to call out that MTE3, like FIX, cannot be treated as publish solely from pipe type.

Local validation:

  • git diff --cached --check
  • license header check
  • PTOMemoryConsistency.cpp.o builds in the local LLVM21 configuration
  • full ptoas remains blocked by the existing local LLVM21 Float8/getStridesAndOffset API mismatch, before this patch code.

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

Follow-up review update:

  • Addressed the CFG/region precision concern by making the conservative fallback region-scoped. Multi-block regions now collect and mark pending state only within the current Region, instead of using the parent op and accidentally mixing sibling regions.
  • func.func declarations without bodies are skipped in both release and acquire analysis.
  • Added test/lit/pto/memory_consistency_external_func.pto to guard external function declarations.
  • Updated the design doc to describe the region-scoped conservative traversal and external declaration behavior.

Validation:

  • git diff --cached --check
  • license header check
  • PTOMemoryConsistency.cpp.o builds with the local LLVM21 configuration

Commit: 4c6e22c6 Refine memory consistency region analysis

@TaoTao-real TaoTao-real force-pushed the codex/fix-issue872-tput-tnotify-release branch from 3222bc0 to e0c24e9 Compare July 3, 2026 02:20
@TaoTao-real

Copy link
Copy Markdown
Contributor Author

PyPTO integration note for this PR:

  • PyPTO should emit memory-consistency semantic ops, not backend actions such as pipe_barrier, dsb, or dcci directly.
  • For non-cache GM payload publish before TNotify, generate:
    pto.TPutOp(...)        # or TStore/TStoreFP that writes GM payload
    pto.FenceReleaseOp(pto.FenceScopeAttr.get(pto.FenceScope.DDR, ctx))
    pto.TNotifyOp(...)
    PTOAS will insert the required local producer-pipe drain before the release fence, for example PIPE_MTE3 for TPUT/MTE3 GM stores or PIPE_FIX for FIX GM stores. EmitC then lowers the fence to dsb(DSB_DDR).
  • For cacheable scalar GM store publish, generate clean before the release fence:
    pto.StoreScalarOp(...)
    pto.CmoCleanOp(pto.AddressSpaceAttr.get(pto.AddressSpace.GM, ctx))
    pto.FenceReleaseOp(pto.FenceScopeAttr.get(pto.FenceScope.DDR, ctx))
    pto.TNotifyOp(...)
  • For scalar GM payload reads after TWait or a successful TTest, generate invalidate before the scalar load:
    pto.TWaitOp(...)
    pto.CmoInvalidateOp(pto.AddressSpaceAttr.get(pto.AddressSpace.GM, ctx))
    pto.LoadScalarOp(...)
  • Helpers that contain payload memory access, CMO/fence, or signal ops need to be inlined before pto-memory-consistency, so the pass can validate the release/acquire ordering in one visible region.

The CI fix commit also exposes FenceScope and FenceScopeAttr through the Python binding, so the P2P Python samples can now generate the required pto.fence.release #pto.fence_scope<ddr> op instead of failing before ptoas runs.

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

Follow-up on the PyPTO-facing API shape: I added Python AttrBuilder registration for the memory-consistency enum attrs, so PyPTO no longer needs to build FenceScopeAttr or pass an explicit MLIR ctx at the call site.

Preferred PyPTO lowering-side form is now:

pto.TPutOp(...)
pto.FenceReleaseOp(pto.FenceScope.DDR)
pto.TNotifyOp(...)

For cacheable GM scalar paths, the same enum-direct style works:

pto.CmoCleanOp(pto.AddressSpace.GM)
pto.FenceReleaseOp(pto.FenceScope.DDR)
...
pto.CmoInvalidateOp(pto.AddressSpace.GM)

The generated IR is unchanged (pto.fence.release #pto.fence_scope<ddr> and pto.cmo.* all #pto.address_space<gm>); this only makes the Python API match the PyPTO integration expectation that users/builders should not manage MLIR context objects explicitly.

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

Non-blocking follow-up notes for memory-consistency precision:

  • The current pass is intentionally conservative for TTest: it treats TTest as an acquire source for subsequent reachable scalar GM loads, rather than proving the load is only on the ready/true path. This is safe, but can require an extra pto.cmo.cacheinvalid on false paths. We can optimize this later with path-sensitive TTest condition tracking.
  • Multi-block CFG fallback is conservative and does not fully model ordered CMO/fence effects across arbitrary CFG edges. This should not miss required release/acquire actions, but can reject otherwise valid CFG-shaped code. A future CFG dataflow pass can reduce false positives.
  • pto.cmo.cacheinvalid all #pto.address_space<gm> is currently whole-cache. Precise payload/range CMO can be optimized later once the ABI and address model are settled.
  • VPTO still has fail-fast stubs for CMO/fence until the DSB/DCCI intrinsic ABI is confirmed.

These are optimization/precision items, not current correctness blockers for the straight-line issue paths covered by this PR. I will add lit coverage for the current conservative behavior and the newly supported scalar release sequence.

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

/run A3

@reedhecre

Copy link
Copy Markdown

已接收 /run a3,A3 板测器会处理这条请求。

页面会自动刷新,可以直接看当前阶段、排队情况和最近结果。

@reedhecre

Copy link
Copy Markdown

A3 板测完成(有跳过)

  • 触发方式:manual
  • 源码提交:8868c9952723
  • 结果汇总:OK 220 / FAIL 0 / SKIP 2
  • 日志:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260706_151912_manual_pr873.log
  • LLVM cache:/home/zhongxuan/ptoas-board-monitor/cache/llvm-project-vpto-llvm21/build-shared
  • 结果 TSV:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260706_151912_manual_pr873.tsv
  • 手动指令:/run a3
  • 触发人:TaoTao-real
  • 触发评论:Fix TPut release fence before TNotify #873 (comment)

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

/run A3

@reedhecre

Copy link
Copy Markdown

已接收 /run A3,A3 板测器会处理这条请求。

页面会自动刷新,可以直接看当前阶段、排队情况和最近结果。

# Conflicts:
#	lib/PTO/Transforms/VPTOCANN900LLVMEmitter.cpp
#	lib/PTO/Transforms/VPTOLLVMEmitter.cpp
#	tools/ptobc/src/mlir_encode.cpp
@reedhecre

Copy link
Copy Markdown

A3 板测完成(有跳过)

  • 触发方式:manual
  • 源码提交:784a4dbbd759
  • 结果汇总:OK 220 / FAIL 0 / SKIP 2
  • 日志:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260707_232058_manual_pr873.log
  • 结果 TSV:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260707_232058_manual_pr873.tsv
  • 手动指令:/run A3
  • 触发人:TaoTao-real
  • 触发评论:Fix TPut release fence before TNotify #873 (comment)

@TaoTao-real

Copy link
Copy Markdown
Contributor Author

/run A3

@reedhecre

Copy link
Copy Markdown

已接收 /run A3,A3 板测器会处理这条请求。

页面会自动刷新,可以直接看当前阶段、排队情况和最近结果。

@reedhecre

Copy link
Copy Markdown

A3 板测完成(有跳过)

  • 触发方式:manual
  • 源码提交:7d450b9dd396
  • 结果汇总:OK 220 / FAIL 0 / SKIP 2
  • 日志:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260708_000700_manual_pr873.log
  • 结果 TSV:/home/zhongxuan/ptoas-board-monitor/runtime/logs/20260708_000700_manual_pr873.tsv
  • 手动指令:/run A3
  • 触发人:TaoTao-real
  • 触发评论:Fix TPut release fence before TNotify #873 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Chunked pto.comm.tput (staging tile smaller than transfer) does not drain its stores before a following TNOTIFY → peer reads partial data (a2a3)

2 participants