更新日志#
本文件记录 tpuasm 各版本面向用户的变化。各版本支持的 Python、libtpu 与 JAX 见版本兼容性。
0.2.0 - 2026-10-05#
新增#
新增
tpu-v6e-tec目标(libtpu 0.0.49):v6e SparseCore TEC 程序映像的汇编与反汇编,助记符和操作数写法与 libtpu 编译器的 LLVM TPU printer 一致;executable 中的 TEC 程序可以导出和等长写回,需显式指定目标。SlotSource新增source_frames与source_kind。source_frames合并 tpuasm 捕获的来源与编译器自带的loc(...),按文件和行列去重,是逐槽源码位置的统一视图;source_kind标明位置来自 tpuasm 捕获(captured)、只来自编译器(compiler_location),还是没有位置(unknown)。函数区间内已占用但没有注释的槽也会列出。来源映射 JSON 的schema_version随之由 2 升为 3。libtpu 0.0.49 的来源捕获新增 hook,覆盖
dma.done展开、MXU prep 改写、v6e matprep 发射、MLIR CSE 与FusedLoc解析。v6e matmul 示例的函数区间内只剩vtrace没有来源。编译器注释中被
loc(...)覆盖的 region builder 说明(例如取模的实现方式、循环退出判断、vreg 切片范围)得以保留,格式为loc(...) :: 原注释。
变更#
清单中的来源注释改为一条从内到外的调用链
path:内层 <- 调用方 [scope; LLO n],同一槽上相同的调用链只显示一次。带方括号的是 tpuasm 捕获的来源,不带的是编译器的位置。嵌套 lowering 的位置接上外层方程的 traceback,内层 op 的来源带有外层调用点。
移除#
不再支持 libtpu
0.0.48.dev20260912+nightly(CPython 3.14t)。仍需使用该构建时,安装 tpuasm 0.1.0。
修复#
TPU v4 TC 的 mask 寄存器移动(
MoveVmsk)此前一律反汇编为misc: vnop,目的与源寄存器只出现在精确清单的.encoding约束中;canonical 清单丢掉这两个字段,重新汇编后移动变成空操作,程序行为改变(真机上表现为挂起)。现在只有vm0 ← vm0写作vnop,其余写作misc: vmmov.8x128.u1 vmD, vmS,与 v6e TC 一致。来源记录中每个 location 的 ordinals 只保留本指令一项。此前保留该 location 的全部 ordinals,完全展开的大运算使每条记录达数十 KB,注释表随指令数平方增长:约 1.8 万个 bundle 的 kernel 的元数据超过 2 GiB,
serialize()报Failed to serialize TpuExecutableProto, is it too large?,读不到清单也无法改写。同一程序的元数据现在约 40 MB。SourceLocation.ordinals因此只含所属指令的 ordinal。发射 hook 只序列化与本指令有关的 location,不再对每条指令序列化整个 SourceMap;上述 kernel 在捕获来源时的编译时间由 53 秒降到 9 秒(不捕获时 3 秒)。
insert_executable_bundles按主程序 overlay 的encoded_word_offset识别装载指令。此前按映像位置识别,程序带有去重常量(第一个 overlay 的偏移不为 0,例如 XLA 的psum、scatter)时报错cannot identify the overlay loader immediates。overlay 的
encoded_word_offset改为相对第一个 overlay 换算程序映像位置。此前第一个 overlay 的偏移不为 0 时(例如 XLA 为scatter生成的程序,偏移为 33),来源映射报错overlay lies outside the program image。捕获来源期间关闭 Pallas 的逐方程 lowering 缓存(jax-ml/jax#41153)。此前相同运算第二次出现时会带上第一次出现的行号,例如同一 kernel 中多次
pltpu.roll。关闭前后机器码相同。
0.1.0 - 2026-09-29#
首个发布。
TPU v4 TC、TPU v4 BCS 与 TPU v6e TC 程序映像的汇编与反汇编;清单显式标出物理槽,写出 formatter 省略的选择字段。
命令行
tpuasm在 serialized executable、程序映像和.tpuasm清单之间转换,支持逐字节可逆的精确导出和便于手工编辑的 canonical 导出。replace_executable_programs等长替换 executable 中的程序,insert_executable_bundles在指定 bundle 前插入片段,load_executable借用已编译函数的调用约定装载执行修改后的 executable。compiler_source_mapping在编译期捕获 Pallas 源码来源,dump_compiled导出带来源注释的清单和来源映射 JSON(schema_version为 2)。encode_tpu_v4_bcs_program、decode_tpu_v4_bcs_program、extract_tpu_v4_bcs_program处理 BCS 程序与 semantic protobuf、容器之间的转换。