TENSTORRENT / LAB 06 OF 08
多核分配:每个输出tile恰好一个拥有者
按输出tile划分工作,验证覆盖、负载和tile编号。
本单元 4 小时。本公司八个单元共 32h,三家公司共额外 96h 核心实践;这笔时间在共同路线之外,未压入厂商入门的44h。
本页是实践讲义。打开、阅读或复制命令不代表完成。新单元的 SDK、simulator 与硬件命令均未在教材建设中执行;自己的结果应按实际后端保存。
先备与马上可用的例子
先完成:tenstorrent-05 →
- 27-a · 商余数分块与边界穷举:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
- 40-b · 十项分到三个核:先看输入和实际源码,再开始自己的修改;教学实现与自己的产出分别记录。
直接打开机制图,边看边手推
- 36 · 可改条件的机制图 → Tensor shape、stride 与 GEMM 分块;图解不执行厂商 SDK。
- 41 · 可改条件的机制图 → Tensix 与 tiles:先安排数据,再安排计算;图解不执行厂商 SDK。
PREDICT FIRST
具体问题与独立预期
输入与约定
M=64,N=96,K=64,因此Mt=2,Nt=3,Kt=2;4个教学worker。A全1,B全1。
先根据输入写下自己的结果与理由,再展开参考推演;随后运行或检查实现。
对照参考结果与原因
6个输出tile可分为数量[2,2,1,1],连续范围[0,2),[2,4),[4,5),[5,6)。每个输出元素为64。
输出tile id=t 对应(m=t/Nt,n=t%Nt)。每个owner独立处理完整K轴,就不需要跨owner合并partial。
机制怎样连接起来
先按输出tile划分,避免第一版同时处理跨核归约。t=4对应m=1,n=1,所需A tile id为2、3,B tile id为1、4;它们与输出t相同并不是普遍规律。
CPU模型的worker是逻辑角色,可以用串行执行模拟分配。真实设备的可用核网格、logical坐标映射和runtime参数需从matching tag完整示例获取;不能把“有4个worker”硬编码成任意芯片都支持的物理坐标。
全1输入容易检查算术,却不能捕捉所有交换错误,因此加第二个坐标编码用例A[i,k]=i%3、B[k,j]=j%5。输出应为64*(i%3)*(j%5),将tile置换变成可见差异。
CHOOSE ONE EXECUTION PATH
按手头环境推进
CPU 路径可以先完成。额外的 SDK 或设备验证要有自己的运行记录;本单元的四小时不同时要求完成四个分支。安装等待超过本页预算时,留下阻塞条件,继续可做的数学、代码与协议工作。
CPU · 现有机器 · 本单元尚未验收
条件:现有 macOS 或 Linux;C++20 编译器或 Python 3 标准库。无需加速卡。
本分支做什么:逻辑owner分配与完整矩阵比较,串行执行也可验证覆盖。
保存什么证据:保存自己的源码、输入、实际 stdout/stderr 和退出码;只证明 CPU 逻辑。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
SDK · 编译与环境 · 本单元尚未验收
条件:已有匹配发行版的 TT-Metalium/TTNN Linux 开发环境。
本分支做什么:核对matching tag多核runtime参数与可用核网格。
保存什么证据:保存实际工具版本与编译命令;仅编译成功不能记成运行通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
官方 simulator · 本单元尚未验收
条件:只有明确提供并且版本匹配的官方 simulator 才属于此分支。
本分支做什么:逻辑worker不是芯片RISC时序模型。
保存什么证据:记录 simulator 名称、版本、输入、日志、退出状态;网页或 CPU 模型不算 simulator。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
真实设备 · 本单元尚未验收
条件:用户已有并可使用的兼容设备或实验室环境;本单元不要求购买、租用或提交集群作业。
本分支做什么:使用合法logical核范围执行两种输入,保存核分配与结果,不预填加速比。
保存什么证据:真实设备输出、同步点、设备型号和复现日志单独保存;未执行保持未通过。
教材初始执行状态:not-executed。这不是对你个人学习进度的判断。
READ → BUILD → BREAK → EXPLAIN
四小时,留下一个完整产出
可拆成多个时段。每次停下时保存代码、输入、实际结果和下一步,不用重新读整篇。没有通过当前检查时继续修正,不靠翻页推进。
1. 分配6个tile · 30 分钟
- 手写四个连续范围与计数,确认没有重叠和遗漏。
- 计算t=4的m/n和两对A/B tile编号。
这一段的产出:工作分配表
2. 建立覆盖检查 · 40 分钟
- 创建长度6的owner数组,初始化-1;每分配一次要求原值仍为-1。
- 边界测试总tile=0,1,3,6以及worker=1,4;worker=0明确拒绝。
这一段的产出:分配器与边界
3. 实现多owner计算 · 90 分钟
- CPU路径按各自t范围调用上一单元K累加函数,每个Ctile只写一次。
- 先全1得到全64,再用坐标编码公式比较所有元素。
- 设备路径从官方multi-core示例的工作分配和per-core runtime参数开始,沿完整源码保证只tilize一次;按实际可用核数选择资源。
这一段的产出:覆盖正确的多owner实现
4. 故意写错Nt · 50 分钟
- CPU路径把t/Nt改为t/Mt,定位越界或错误owner映射;测试必须拒绝。
- 检查仅剩1tile时其他worker空区间安全跳过,不启动读取不存在tile的任务。
- 硬件路径只运行已通过CPU映射的参数,不在未知物理坐标上注入错误。
这一段的产出:编号错误回归
5. 解释可扩展限制 · 30 分钟
- 说明增加owner为什么不保证线性提速:重复读A/B、NoC、L1等仍影响。
- 保存每个owner处理的tile列表,作为debug定位索引。
这一段的产出:覆盖证明与限制
EXPLICIT ENVIRONMENT / EXPLICIT STATUS
命令与可保存的起点
以下代码按各自环境使用,运行前完成对应步骤并核对版本。编译失败后停止,不运行目录中的旧二进制;每次采集日志使用新的运行目录。设备程序仅运行在你已有且可使用的环境中。
1. 仅匹配源码构建与已有设备
环境:真实设备 · 状态:not-executed。核对官方 API / 工具说明 ↗
# Confirm the current directory is the selected tt-metal checkout.
export TT_METAL_HOME="$PWD"
./build_metal.sh --build-programming-examples && ./build/programming_examples/metal_example_matmul_multi_core一个必须能解释的错误
错误情境:用Mt代替Nt还原输出tile的列坐标。
为什么会错:线性编号的行跨度是输出每行tile数Nt;方阵容易掩盖这个错误。
怎样修复:使用非方形2×3 tile网格并检查每个owner覆盖。
EVIDENCE BEFORE ADVANCING
验收与面试追问
- 6tile/4owner和t=4的具体编号正确。
- 坐标编码输入防止全1掩盖置换。
- 零工作、少于worker数、worker0都有明确行为。
最后留下这几项
输入和预期、自己的源码或明确标为推演的状态表、实际命令/输出/退出码、一个失败与修复、后端与版本、尚未执行的部分。运行已有教学例子与独立完成修改分别记录。
1. 为何优先切输出而不是K?
对照中文要点与英文回答
每个输出有单一owner,避免第一版跨核合并partial的额外协议。
Output ownership avoids an extra cross-core partial reduction in the first implementation.
2. t=4需要哪些输入tile?
对照中文要点与英文回答
Nt=3时(m,n)=(1,1),Kt=2:A为2/3,B为1/4。
For t=4, the output coordinate is (1,1). It consumes A tiles 2 and 3 and B tiles 1 and 4.
3. 全1测试有何盲点?
对照中文要点与英文回答
某些坐标置换仍产生64,所以必须加行列编码或非对称数据。
All-ones inputs can hide permutations. I add coordinate-dependent values.
这些是依照本单元机制设计的追问,不是公司真题。个人验收仍依据实际代码、测试、测量与口述。
资料与版本核验
- Matmul Multi Core ↗
Work distribution; per-core runtime arguments
核验日期:2026-09-05。latest;使用完整源码的单次 tilize/untilize 链路,不拼接重复展示的文档片段。
- Matmul Single Core ↗
Tile indexing; reader/compute/writer; enqueue and verification
核验日期:2026-09-05。latest;记录 build_metal.sh 选项及源码 commit;页面代码片段不能替代完整匹配版本源码。
正文、问题和实践设计依据公开资料独立撰写。官方页面的示例输出是资料中的结果,不是本机运行证据。latest 链接可能变化,请在自己的复现说明中保留实际版本。