按代号划分的常量表
本页所有常量值均从
libtpu-0.0.40-cp314wheel 中的libtpu.so按字节精确解码而来(BuildID md589edbbe81c5b328a958fe628a9f2207d)。其他版本会有所不同。
摘要
本页是二进制文件已知的每个 TPU 代号的按代硬件常量汇总表:Jellyfish (v2)、Dragonfish (v3)、Pufferfish (v4)、Viperfish (v5p/v5e)、Ghostlite (v6e) 和 6acc60406 (v7x)。它以参考表为中心:主表是本页重点,周围的说明文字只用于标明每行来源并标记可信度。
有两类来源供给该表。第一类也是主要来源,是嵌入的 <codename>_chip_parts.binarypb proto blob,直接从 .rodata 解码(schema 和解析路径见 chip_parts.binarypb 解码)。下面的每个内存大小、核心数量、MXU 几何整数、时钟、寄存器数量和 DMA 常量都来自这些字节,以 bytes_per_word × word_count 物化,或作为标量字段读取。第二类是 proto 不携带的一小组常量,即 VMEM/SMEM/CMEM bank 数量,它们是各代号 *Target::MemBanks override 中的 C++ 字面量。
所有九个 blob 都从 .rodata 中切出,已用 md5 对照其 FileWrapper 描述符指纹验证,并按字段根据从 protodesc_cold 恢复的 schema 遍历。解码逐字节复现了重实现者会预期的关系(例如对于 128×128 代,峰值 BF16 = 2 × mxu_count × 128² × frequency_mhz),并且每行都带有说明其来源的可信度列。
| 来源(能力) | 九个 *_chip_parts.binarypb blob,.rodata 0x0BDF29A0..0x0BDF3AB8 |
| 来源(bank 数量) | *Target::MemBanks C++ overrides(地址如下) |
| 解码方法 | md5 验证切出 + 按 protodesc_cold schema 字段遍历 |
| 代际 | jellyfish/dragonfish/pufferfish/viperfish/ghostlite/6acc60406 (TpuVersionProto 1..6) |
| 可信度 | 除非单元格另有注释,否则为 CONFIRMED |
主硬件常量表
除非另有说明,所有值均按 TensorCore 计。"std" 是完整器件;"lite" 是 viperfish_lite (v5e) 或 pufferfish_lite (v4 lite) blob,在解析时由 variant_name 字段区分。6acc60406 按 die / 完整芯片显示(tensornode blob 与完整双 die 封装)。HBM 大小单元格显示精确字节乘积;GiB 数值为 bytes / 2^30。
| 常量 | v2 Jellyfish | v3 Dragonfish | v4 Pufferfish (std / lite) | v5p/v5e Viperfish (std / lite) | v6e Ghostlite | v7x 6acc60406 (die / full) |
|---|---|---|---|---|---|---|
| TpuVersionProto | 1 | 2 | 3 | 4 | 5 | 6 |
driver_abi_version | 1 | 1 | 1 | 1 | 1 | 1 |
| HBM 大小 | 16 GiB | 32 GiB | 32 GiB / 8 GiB | 96 GiB / 16 GiB | 31.5 GiB | 95 GiB / 190 GiB |
| HBM stack 数 × 每 stack | 2 × 8 GiB | 2 × 16 GiB | 1 × 32 GiB / 1 × 8 GiB | 1 × 96 GiB / 1 × 16 GiB | 1 × 31.5 GiB | 1 / 2 × 95 GiB |
HBM word (bytes_per_word) | 1024 B | 1024 B | 512 B | 32 B / 512 B | 32 B | 32 B |
| HBM 时钟 | 1400 MHz | 1800 MHz | 2400 MHz | 3600 / 3200 MHz | 6400 MHz | 7200 MHz |
| HBM 带宽 / stack | 0.317 TB/s | 0.430 TB/s | 0.982 / 0.492 TB/s | 2.350 / 0.738 TB/s | 1.638 TB/s | 3.686 TB/s |
| VMEM / TensorCore | 16 MiB | 16 MiB | 16 MiB | 64 / 128 MiB | 128 MiB | 64 MiB |
| VMEM word | 512 B | 512 B | 512 B | 512 B | 512 B | 512 B |
| SMEM (TensorCore) | 16 KiB | 16 KiB | 1 MiB | 1 MiB | 1 MiB | 1 MiB |
| SMEM word | 4 B | 4 B | 4 B | 4 B | 4 B | 4 B |
| SFLAG (TensorCore) | 1 KiB | 1 KiB | 2 KiB | 2 KiB | 2 KiB | 16 KiB |
| SFLAG word | 4 B | 4 B | 4 B | 4 B | 4 B | 4 B |
| CMEM (SharedMemory) | 不存在 | 不存在 | 128 MiB / 128 MiB | 不存在 | 不存在 | 不存在 |
| CMEM word / 时钟 / bw | — | — | 512 B / 1050 MHz / 2.151 TB/s | — | — | — |
| MXU lane × sublane | 128 × 8 | 128 × 8 | 128 × 8 | 128 × 8 | 128 × 8 | 128 × 8 |
| MXU 数 / TensorCore | 1 | 2 | 4 | 4 | 2 | 2 |
| XLU 数 / TensorCore | 1 | 1 | 2 | 3 | 2 | 2 |
| IAR 数 / TensorCore | 2 | 2 | 2 | 2 | 2 | 2 |
| MXU systolic 维度 | 128×128 | 128×128 | 128×128 | 128×128 | 256×256 | 256×256 |
| TensorCore 频率 | 700 MHz | 940 MHz | 1050 MHz | 1750 / 1500 MHz | 1750 MHz | 1900 MHz |
| TensorCores / 芯片 (std/lite) | 2 | 2 | 2 / 1 | 2 / 1 | 1 | 1 / 2 |
| 寄存器文件 SREG/VREG/PREG/VMREG | 32/32/15/8 | 32/32/15/8 | 32/32/15/8 | 32/64/14/16 | 32/64/14/16 | 32/64/14/16 |
| 加速器核心类型 | BARNA_CORE | BARNA_CORE | BARNA_CORE | SPARSE_CORE | SPARSE_CORE | SPARSE_CORE |
| 加速器数量 / 芯片 (std/lite) | 2 | 2 | 4 / 0 | 4 / 0 | 2 | 2 / 4 |
| SparseCore 频率 | — | — | — | 1475 MHz | 1350 MHz | 1750 MHz |
| SC sequencers (SEQ/TAC/TEC) | — | — | — | 1 / 16 / 16 | 1 / 16 / 16 | 1 / 0 / 16 |
| SC TEC VectorIsa lane × sublane | — | — | — | 8 × 1 | 8 × 1 | 16 × 1 |
| SC SPMEM / TILESPMEM | — | — | — | 8 MiB / 512 KiB | 4 MiB / 256 KiB | 8 MiB / 512 KiB |
| SC SMEM (SCS) / SFLAG (SCS) | — | — | — | 64 KiB / 28 KiB | 64 KiB / 28 KiB | 64 KiB / 28 KiB |
SC tile_hbm_bw / stream_granule | — | — | — | 32 B/cyc / 4 B | 32 B/cyc / 4 B | 64 B/cyc / 4 B |
| DMA granule bytes | 1024 B | 1024 B | 512 B | 32 B / 512 B | 32 B | 32 B |
| DMA host / device 对齐 | 16 / 1024 | 16 / 1024 | 32 / 512 | 32 / 32 (lite 32 / 512) | 32 / 32 | 32 / 32 |
sync_flag_granule | 1024 B | 1024 B | 512 B | 32 B | 32 B | 32 B |
max_single_host_dma | 8 MiB | 16 MiB | 2 GiB | 128 GiB | 64 GiB | 32 GiB |
| 杂项:extra_done / host_async / count_dones | n/n/n | n/n/n | y/n/n | y/y/y (lite y/y/n) | y/y/y | y/y/y |
标题 HBM 和 VMEM 单元格背后的精确字节乘积:Jellyfish HBM 1024 × 8,388,608 = 8,589,934,592 B 每 stack × 2;Pufferfish HBM 512 × 67,108,864 = 34,359,738,368 B (32 GiB) + CMEM 512 × 262,144 = 134,217,728 B (128 MiB);Viperfish HBM 32 × 3,221,225,472 = 103,079,215,104 B(精确为 96 GiB);Ghostlite HBM 32 × 1,056,964,608 = 33,822,867,456 B(31.5 GiB,标称 32 GiB 扣除 ECC);6acc60406 HBM 32 × 3,187,671,040 = 102,005,473,280 B(每 die 95 GiB)。
Bank 数量(不是 proto 字段 — *Target::MemBanks C++ 字面量)
| MemBanks(space) | v2 JF | v3 DF | v4 PF | v5p VF | v6e GL | v7x |
|---|---|---|---|---|---|---|
| VMEM (space 3) | 8 | 8 | 16 | 32 | 32 | 32 |
| CMEM (space 4) | FATAL | FATAL | 32 | FATAL | FATAL | FATAL |
| SMEM (space 5) | 2 | 2 | 8 | 8 | 8 | 8 |
JellyfishTarget::MemBanks @ 0x1d48fc80 对 space 3 返回 8,对 space 5 返回 2,其他情况返回 LOG(FATAL)(target_jellyfish.h:215)。PufferfishTarget::MemBanks @ 0x1d493900 对 spaces 3/4/5 索引位于 .rodata 0xb5305c8 = {16, 32, 8} 的表(target_pufferfish.h:228)。ViperfishTarget::MemBanks @ 0x1d4999c0 和 GhostliteTarget::MemBanks @ 0x1d4969c0 返回 32 / 8 / FATAL。Dragonfish 没有 override 这些项,并继承 Jellyfish 的 8 / 2。
注意: Pufferfish 是唯一在
MemBanks阶梯中有 CMEM (space 4) 项的代,也是唯一在chip_parts中有SharedMemory[CMEM](128 MiB) 的代。其他每一代都会在 CMEM space 上LOG(FATAL),并且没有 CMEM shared memory — 这是对“CMEM 只在 v4 上是一等公民”的两种独立编码。见 内存层级。
读取表格
BarnaCore → SparseCore 转折点
加速器核心这一行是代际枢纽。v2/v3/v4 携带 BARNA_CORE 核心(SparseCore 之前的 embedding/dedup 引擎);v5p/v6e/v7 携带 SPARSE_CORE 核心,其中有 SC_SEQ +(仅 v5p/v6e 上的 16× SC_TAC)+ 16× SC_TEC sequencers,并带有 SPMEM/TILESPMEM/TEC 内存家族。6acc60406 去掉了单独的 SC_TAC sequencer(其 SparseCore 只有 SC_SEQ + SC_TEC×16),并把 SC_TEC VectorIsa lane 从 8 扩宽到 16。lite 器件(pufferfish_lite、viperfish_lite)既不携带 BarnaCore,也不携带 SparseCore — 它们是仅有 TensorCore 的单核 die。
BarnaCore sequencer 组成在 v2/v3/v4 间并不统一:Jellyfish 的 BarnaCore 只携带 BC_ADDR ×16(其 blob 中没有 BC_SEQ 项),而 Dragonfish 和 Pufferfish 在 16 个 BC_ADDR handlers 旁又加入一个 BC_SEQ ×1 主 sequencer。枚举 Jellyfish BarnaCore sequencers 的重实现者不能假设存在 v2 proto 中缺失的 BC_SEQ。
v5p 的寄存器文件扩宽
v2/v3/v4 TensorCore sequencers 报告 SREG 32、VREG 32、PREG 15、VMREG 8。从 Viperfish (v5p) 开始,该文件变为 SREG 32、VREG 64、PREG 14、VMREG 16 — VREG 翻倍,VMREG 翻倍,PREG 减一。这是 v4→v5p 边界处一个清晰可从 proto 观察到的不连续点,重实现者在分配按代寄存器集合时必须遵守。
MXU 数量与 systolic 维度
mxu_count 在 v2..v5p 间按 1→2→4→4 上升,然后在 v6e/v7 下降 到 2。该下降由 systolic-array 维度补偿:v6e/v7 使用 2 × 256×256 arrays(GhostliteTarget C++ override MxuContractingSize/MxuNoncontractingSize = 256,在 0x1d497840/0x1d497860 处按字节确认;基础 Target 返回 128),而 v2..v5p 使用最多 4 × 128×128。256 维度是唯一一个属于 C++ 字面量而非 proto 字段的 MXU 几何值 — proto 只携带 lane_count=128 和 mxu_count — 但该字面量本身是字节精确的,因此 systolic-dim 行为 CONFIRMED,并标记为 C++ override 来源而不是 proto 字段。128×128 代可交叉验证:峰值 BF16 = 2 × mxu_count × 128² × frequency_mhz 复现了公开的每芯片 FLOPS:v2(1 MXU × 700 MHz 时 22.9 T)、v3(2 × 940 时 61.6 T)和 v4(4 × 1050 时 137.6 T),误差在 1% 内。
注意: proto 的
sublane_count对 每一代 都是 8,包括 v4 —chip_partsVectorIsa.sublane_count字段明确是 8,而不是 16。tiling pass 消耗的 tile 维度在此构建中每一代都是Tile(SublaneCount, LaneCount) = (8, 128)(Target::SublaneCountaccessor 正是读取这个 proto 值)。硬编码 16-sublane v4 tile 的重实现会偏离加载到的几何。
相关组件
| 名称 | 关系 |
|---|---|
TpuChipParts::FromProto | 解析每个 blob;上面的 proto 字段成为 Target 能力字段 |
*Target::MemBanks | bank 数量行的 C++ 来源(这里唯一的非 proto 整数) |
TpuChipConfig::Create | mode configs 的并行解析器;不是本页任何行的来源 |
交叉引用
- chip_parts.binarypb 解码 — 这些常量解码自其中的 proto schema、blob 位置和解析路径
- TpuChipConfig — 这些常量如何组装进运行时
Targetconfig 以及谁会读取它 - 代号矩阵 — TpuVersion ↔ codename ↔ marketing-name 映射
- 按代比较矩阵 — 跨页面汇总的按代比较
- 内存层级 — 这些大小填充的 HBM/VMEM/SMEM/SFLAG/CMEM 层级模型
- 成本模型概览 — 频率和带宽行的消费者
- ISA 概览 — MXU lane/sublane 和寄存器文件行的消费者