TENSTORRENT / LAB 07 OF 08
DPRINT、Watcher与profiling:先找到停在哪一页
为单核pipeline设置少量可解释观测点。
本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。
本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。
先备与马上可用的例子
先完成:tenstorrent-06 →
- 39-b · 预留不代表可读:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
- 40-a · 两组reader/compute/writer:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
直接打开机制图,边看边手推
- 43 · 逐步状态与文字图解 → Reader、compute、writer:缓冲区里的生产与消费;图解不执行厂商 SDK。
PREDICT FIRST
具体问题与独立预期
输入与约定
三页输入id0,1,2;教学日志 R0,C0,W0,R1,C1,W1,R2,C2,缺W2。
先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。
对照参考结果与原因
能定位最后完成compute的是页2,但不能仅凭缺W2断定writer未运行:日志配置/换行/刷新也可能影响可见性。
观测是证据的一部分。要结合CB发布计数、完成等待和最终输出判断,不能把打印顺序当所有硬件事件的全序。
机制怎样连接起来
选择少量事件:reader完成并push、compute消费并产出、writer完成并pop。每行带页号、核号和阶段,DPRINT放在所读buffer仍有效的区间。为防输出爆炸只观察一个核和一个小输入。
公开文档指出DPRINT的编译与host读取受环境配置影响,行结束符也影响flush。Watcher可提供waypoint和部分错误检查,但它不是所有并发问题的证明器。不要在共享设备上刻意制造非法NoC地址或无限等待。
profiling另开一次正确运行:host Python时间与device kernel时间分别记录。CPU分支可写日志检查器检验缺失/重复页,不生成“真设备trace”;有设备时先关闭debug打印再做性能采样。
CHOOSE ONE EXECUTION PATH
按手头环境推进
CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。
CPU · 现有机器 · 本单元尚未验收
条件:现有 macOS 或 Linux;C++20 编译器或 Python 3 标准库。无需加速卡。
本分支做什么:日志检查器和受控缺失/重复/顺序错误,不需要设备。
保存什么证据:保存自己的源码、输入、实际 stdout/stderr 和退出码;只证明 CPU 逻辑。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
SDK · 编译与环境 · 本单元尚未验收
条件:已有匹配发行版的 TT-Metalium/TTNN Linux 开发环境。
本分支做什么:核对DPRINT/Watcher在matching source build的开启方式。
保存什么证据:保存实际工具版本与编译命令;仅编译成功不能记成运行通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
官方 simulator · 本单元尚未验收
条件:只有明确提供并且版本匹配的官方 simulator 才属于此分支。
本分支做什么:CPU日志明确标synthetic,不当NoC trace。
保存什么证据:记录 simulator 名称、版本、输入、日志、退出状态;网页或 CPU 模型不算 simulator。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
真实设备 · 本单元尚未验收
条件:用户已有并可使用的兼容设备或实验室环境;本单元不要求购买、租用或提交集群作业。
本分支做什么:仅小输入和少量核观测;实际profiling单独运行并注明host/device范围。
保存什么证据:真实设备输出、同步点、设备型号和复现日志单独保存;未执行保持未通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
READ → BUILD → BREAK → EXPLAIN
四小时,留下一个完整产出
可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。
1. 定义观测事件 · 30 分钟
- 为每个页列R/C/W三条事件,注明表示完成而非提交。
- 把本页缺W2日志输入检查器,报告页2缺writer完成。
这一段的产出:事件合同
2. 写日志检查器 · 40 分钟
- 解析自己生成的CPU逻辑事件stage/page字段,拒绝未知阶段、重复完成和C先于R;这种因果顺序检查只针对已按逻辑事件排序的模型日志。
- 允许不同页交错,只要求每页R→C→W及实际共享资源依赖。不要把该检查器直接用于raw DPRINT:不同RISC的文本到达可能重排,缺失或反序先标待查,再结合版本、完成事件、CB状态和最终输出定位。
这一段的产出:有限日志验证器
3. 加入真实观测或模型 · 90 分钟
- CPU路径生成三页正常交错日志,再注入缺W2、重复C1、W0早于C0。
- 设备路径在匹配source build单核例加少量DPRINT,编译前设置只读核范围,保留换行。
- 需要Watcher时使用官方基本周期配置;不启用可能读取不安全状态的DUMP_ALL。
这一段的产出:正常与失败日志
4. 区分看不见与没发生 · 50 分钟
- 给缺日志列三个候选原因:未执行、未换行、未启用;设计一个能区分的观测。
- 已有设备才另跑Tracy或device profiler,按官方版本说明采集;不把host zone时长直接叫Tensix计算周期。
- 计时前关闭debug选项,保留配置差异。
这一段的产出:诊断树与性能范围
5. 回答故障追问 · 30 分钟
- 说明最小复现输入与最后一个可信完成事件。
- 保存工具版本、配置和实际后端,未收集的硬件数据写pending。
这一段的产出:debug短报告
EXPLICIT ENVIRONMENT / EXPLICIT STATUS
命令与可保存的起点
以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。
1. 在匹配source build中、编译kernel之前设置;仅观测核0,0
环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗
export TT_METAL_DPRINT_CORES=0,0
export TT_METAL_WATCHER=1202. 恢复普通运行;可选对自己的tt_matmul.py做host profiling
环境:真实设备 · 状态:not-executed。核对官方 API / 工具说明 ↗
unset TT_METAL_DPRINT_CORES
unset TT_METAL_WATCHER
python -m tracy tt_matmul.py一个必须能解释的错误
错误情境:DPRINT没有换行,于是认为代码没有执行。
为什么会错:host侧可能仍缓存未结束行,关闭时尾部也可能不出现。
怎样修复:确认配置与换行,再结合完成条件和输出判断,不能用单条缺失日志直接下结论。
EVIDENCE BEFORE ADVANCING
验收与面试追问
- 三种CPU模型日志故障被识别,合法跨页交错不误报;raw DPRINT没有被当成具有全局因果顺序的模型日志。
- 观测点位于buffer有效生命周期内。
- 没有合成硬件profiling数据;host/device时间分栏。
最后留下这几项
输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。
1. 打印顺序能证明全局顺序吗?
对照中文要点与英文回答
不能直接证明所有核事件的全序,缓冲和传输影响可见顺序;按事件标识和依赖分析。
Printed order is not a universal device execution order. I reason from event identities and required dependencies.
2. Watcher没有报错等于正确吗?
对照中文要点与英文回答
不是,它覆盖特定观测和检查;仍需oracle、边界和进展验证。
Watcher covers specific checks, not complete correctness. The oracle and protocol tests remain necessary.
3. 为何调试结束后再测性能?
对照中文要点与英文回答
打印和监控改变执行成本与时序;基线要写清观测工具状态。
Debug instrumentation changes cost and timing. I measure with a clearly recorded instrumentation configuration.
这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。
资料与版本核验
- Device Debug Print ↗
Enabling; newline termination; CB print lifetime
核验日期:2026-09-05。latest;工具完整支持以 source build 为准,记录编译时 DPRINT 配置。
- Watcher ↗
Enabling; waypoints; NoC and CB diagnostics
核验日期:2026-09-05。latest;架构代际相关功能单独核对,不默认启用 DUMP_ALL。
- Tracy Profiler ↗
Source build; Python scripts; host profiling
核验日期:2026-09-05。latest;记录 tt-metal commit 与 profiler 构建配置。
- Device Program Profiler ↗
Device-side instrumentation and timing
核验日期:2026-09-05。latest;设备 profiler 数据与 host Python 时间分开,版本以 source build 为准。
正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。