← Tenstorrent 专题与八个进阶单元

TENSTORRENT / LAB 07 OF 08

DPRINT、Watcher与profiling:先找到停在哪一页

为单核pipeline设置少量可解释观测点。

本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。

本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。

先备与马上可用的例子

先完成:tenstorrent-06 →

直接打开机制图,边看边手推

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 分钟

  1. 为每个页列R/C/W三条事件,注明表示完成而非提交。
  2. 把本页缺W2日志输入检查器,报告页2缺writer完成。

这一段的产出:事件合同

2. 写日志检查器 · 40 分钟

  1. 解析自己生成的CPU逻辑事件stage/page字段,拒绝未知阶段、重复完成和C先于R;这种因果顺序检查只针对已按逻辑事件排序的模型日志。
  2. 允许不同页交错,只要求每页R→C→W及实际共享资源依赖。不要把该检查器直接用于raw DPRINT:不同RISC的文本到达可能重排,缺失或反序先标待查,再结合版本、完成事件、CB状态和最终输出定位。

这一段的产出:有限日志验证器

3. 加入真实观测或模型 · 90 分钟

  1. CPU路径生成三页正常交错日志,再注入缺W2、重复C1、W0早于C0。
  2. 设备路径在匹配source build单核例加少量DPRINT,编译前设置只读核范围,保留换行。
  3. 需要Watcher时使用官方基本周期配置;不启用可能读取不安全状态的DUMP_ALL。

这一段的产出:正常与失败日志

4. 区分看不见与没发生 · 50 分钟

  1. 给缺日志列三个候选原因:未执行、未换行、未启用;设计一个能区分的观测。
  2. 已有设备才另跑Tracy或device profiler,按官方版本说明采集;不把host zone时长直接叫Tensix计算周期。
  3. 计时前关闭debug选项,保留配置差异。

这一段的产出:诊断树与性能范围

5. 回答故障追问 · 30 分钟

  1. 说明最小复现输入与最后一个可信完成事件。
  2. 保存工具版本、配置和实际后端,未收集的硬件数据写pending。

这一段的产出:debug短报告

EXPLICIT ENVIRONMENT / EXPLICIT STATUS

命令与可保存的起点

以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。

1. 在匹配source build中、编译kernel之前设置;仅观测核0,0

环境:SDK · 编译与环境 · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
export TT_METAL_DPRINT_CORES=0,0
export TT_METAL_WATCHER=120
2. 恢复普通运行;可选对自己的tt_matmul.py做host profiling

环境:真实设备 · 状态:not-executed。核对官方 API / 工具说明 ↗

bash · 按说明保存到自己的练习目录
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 链接可能变化,请在自己的复现说明中保留实际版本。