Skip to content

按代号划分的常量表

本页所有常量值均从 libtpu-0.0.40-cp314 wheel 中的 libtpu.so 按字节精确解码而来(BuildID md5 89edbbe81c5b328a958fe628a9f2207d)。其他版本会有所不同。

摘要

本页是二进制文件已知的每个 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 Jellyfishv3 Dragonfishv4 Pufferfish (std / lite)v5p/v5e Viperfish (std / lite)v6e Ghostlitev7x 6acc60406 (die / full)
TpuVersionProto123456
driver_abi_version111111
HBM 大小16 GiB32 GiB32 GiB / 8 GiB96 GiB / 16 GiB31.5 GiB95 GiB / 190 GiB
HBM stack 数 × 每 stack2 × 8 GiB2 × 16 GiB1 × 32 GiB / 1 × 8 GiB1 × 96 GiB / 1 × 16 GiB1 × 31.5 GiB1 / 2 × 95 GiB
HBM word (bytes_per_word)1024 B1024 B512 B32 B / 512 B32 B32 B
HBM 时钟1400 MHz1800 MHz2400 MHz3600 / 3200 MHz6400 MHz7200 MHz
HBM 带宽 / stack0.317 TB/s0.430 TB/s0.982 / 0.492 TB/s2.350 / 0.738 TB/s1.638 TB/s3.686 TB/s
VMEM / TensorCore16 MiB16 MiB16 MiB64 / 128 MiB128 MiB64 MiB
VMEM word512 B512 B512 B512 B512 B512 B
SMEM (TensorCore)16 KiB16 KiB1 MiB1 MiB1 MiB1 MiB
SMEM word4 B4 B4 B4 B4 B4 B
SFLAG (TensorCore)1 KiB1 KiB2 KiB2 KiB2 KiB16 KiB
SFLAG word4 B4 B4 B4 B4 B4 B
CMEM (SharedMemory)不存在不存在128 MiB / 128 MiB不存在不存在不存在
CMEM word / 时钟 / bw512 B / 1050 MHz / 2.151 TB/s
MXU lane × sublane128 × 8128 × 8128 × 8128 × 8128 × 8128 × 8
MXU 数 / TensorCore124422
XLU 数 / TensorCore112322
IAR 数 / TensorCore222222
MXU systolic 维度128×128128×128128×128128×128256×256256×256
TensorCore 频率700 MHz940 MHz1050 MHz1750 / 1500 MHz1750 MHz1900 MHz
TensorCores / 芯片 (std/lite)222 / 12 / 111 / 2
寄存器文件 SREG/VREG/PREG/VMREG32/32/15/832/32/15/832/32/15/832/64/14/1632/64/14/1632/64/14/16
加速器核心类型BARNA_COREBARNA_COREBARNA_CORESPARSE_CORESPARSE_CORESPARSE_CORE
加速器数量 / 芯片 (std/lite)224 / 04 / 022 / 4
SparseCore 频率1475 MHz1350 MHz1750 MHz
SC sequencers (SEQ/TAC/TEC)1 / 16 / 161 / 16 / 161 / 0 / 16
SC TEC VectorIsa lane × sublane8 × 18 × 116 × 1
SC SPMEM / TILESPMEM8 MiB / 512 KiB4 MiB / 256 KiB8 MiB / 512 KiB
SC SMEM (SCS) / SFLAG (SCS)64 KiB / 28 KiB64 KiB / 28 KiB64 KiB / 28 KiB
SC tile_hbm_bw / stream_granule32 B/cyc / 4 B32 B/cyc / 4 B64 B/cyc / 4 B
DMA granule bytes1024 B1024 B512 B32 B / 512 B32 B32 B
DMA host / device 对齐16 / 102416 / 102432 / 51232 / 32 (lite 32 / 512)32 / 3232 / 32
sync_flag_granule1024 B1024 B512 B32 B32 B32 B
max_single_host_dma8 MiB16 MiB2 GiB128 GiB64 GiB32 GiB
杂项:extra_done / host_async / count_donesn/n/nn/n/ny/n/ny/y/y (lite y/y/n)y/y/yy/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 JFv3 DFv4 PFv5p VFv6e GLv7x
VMEM (space 3)8816323232
CMEM (space 4)FATALFATAL32FATALFATALFATAL
SMEM (space 5)228888

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 @ 0x1d4999c0GhostliteTarget::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=128mxu_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_parts VectorIsa.sublane_count 字段明确是 8,而不是 16。tiling pass 消耗的 tile 维度在此构建中每一代都是 Tile(SublaneCount, LaneCount) = (8, 128)Target::SublaneCount accessor 正是读取这个 proto 值)。硬编码 16-sublane v4 tile 的重实现会偏离加载到的几何。


相关组件

名称关系
TpuChipParts::FromProto解析每个 blob;上面的 proto 字段成为 Target 能力字段
*Target::MemBanksbank 数量行的 C++ 来源(这里唯一的非 proto 整数)
TpuChipConfig::Createmode configs 的并行解析器;不是本页任何行的来源

交叉引用