BarnaCore 概述
此页面上的每个代号、引擎名称、定序器类型值和每代存在声明都是从
libtpu-0.0.40-cp314轮子(构建 ID89edbbe81c5b328a958fe628a9f2207d)中的libtpu.so读取的 - 来自分解的 C++ 符号表 (nm -C)、TpuSequencerTypeToString/TpuVersionToString枚举指针表(通过.data.rel.ro重定位解析),以及每个系列的isa命名空间符号。其他版本有所不同。
摘要
BarnaCore (BC) 是 TPU 的 pre-SparseCore 嵌入/稀疏查找协处理器。它执行与 SparseCore 后来所做的相同的架构工作 - 针对 HBM 中的 GB 级表进行硬件加速嵌入收集、查找和梯度分散添加,这是 TensorCore 的密集脉动 MXU 无法有效服务的访问模式 - 但它使用更早、更窄的 ISA 来实现。 BarnaCore 已推出三代:Jellyfish(TpuVersion 0,TPU v2)、Dragonfish(TpuVersion 1,TPU v3)和 Pufferfish(TpuVersion 2,TPU v4)。从 Viperfish 一代(TpuVersion 3,TPU v5e)开始,它已退役并被 SparseCore 批量取代。切口非常锋利,在 Pufferfish→Viperfish 硅边界 (TpuVersion 2→3) 处掉落一次:此二进制文件中没有任何一代同时提供实时 BarnaCore 和实时 SparseCore。
在 BarnaCore 时代,引擎具有“两种截然不同的个性”,每一代所携带的个性都是每一代的。 Jellyfish 和 Dragonfish(jxc 系列)仅公开 BarnaCore 地址处理程序 (BCAH) — 由 TensorCore 自己的编码器内联驱动的 16 字节地址生成捆绑流,没有独立的嵌入定序器。 Pufferfish(pxc/pfc 系列)达到了最高水平:它获得了完整的 BarnaCore 标量序列器 (BCS) — 一个完全独立的 32 字节 VLIW 机器,具有自己的双标量管道 (Scalar0/Scalar1)、一个单独的 BarnaCore Channel 向量单元(宽向量 ALU)名册 — 整数/浮点算术、比较和超越)、私有四层内存层次结构 (barna_core_{bmem,smem,sflag,imem})、硬连线同步 FSM 及其自己的 181 KB LLVM 指令编码表(InstBits_BarnaCorePxcHwMode、0x2c460 = 181,344 字节)。 Pufferfish 是最后一款 BarnaCore 芯片,也是其 ISA 最接近 SparseCore 标准化的芯片。
此页面为导航页面。它修复了 BarnaCore 的含义,命名了 BCS/BCAH 个性分裂及其二进制证明的每代存在,在读者需要定向的级别上绘制了主机→HBM→BarnaCore→TensorCore 嵌入数据路径,并路由到拥有每个部分的页面。深层机制——端到端退役证据、BCS 32 字节捆绑字节映射、标量 ISA 名册、合并 ALU 位布局、每代性能网格和 JF/DF 16 字节地址处理程序捆绑——位于下面交叉引用的同级页面上。
重新实现,合约为:
- BarnaCore 是它自己的 ISA 系列,而不是 TensorCore 模式。 Pufferfish 具有完全独立的
pxc::pfc::isa::BarnaCore{Sequencer,Channel}CodecBase类层次结构和专用的 LLVM 子目标 (TPUBcSubtarget);水母/龙鱼携带isa::EncoderBcsDf叶子。重新实现者必须将 BC 视为一个单独的 VLIW 机器,通过 DMA 和同步标志与 TensorCore 协调,而不是作为额外的 TensorCore 插槽。 - 两种性格,按世代划分。 JF/DF 仅运送 BCAH(16 字节捆绑包,
TpuSequencerType= 2); Pufferfish 附带 BCS(32 字节包,TpuSequencerType= 1)加上通道向量单元。为 Jellyfish 目标发出 BCS 程序或为 Pufferfish 发出 BCAH 捆绑包是编解码器错误。 - 每代存在是合同的一部分。 BarnaCore 仅适用于 JF/DF/PF。此二进制文件中的任何 v5+ 系列命名空间 (
vfc/glc/gfc) 下都有零BarnaCore*ISA 符号 — Viperfish、Ghostlite 和6acc60406没有实时 BarnaCore。以 v5+ 编解码器为目标的 BarnaCore 无需构建编码器叶。 - 退役留下了痕迹,而不是彻底删除。
TpuSequencerType永远保留 BCS=1 / BCAH=2(原始向后兼容),Set*BarnaCore*/Enable*BarnaCore*驱动程序控制平面保留到紧随其后的一代(Viperfish 上的TpuCoreVxcDriverImpl带有与实时Jxc/Pxc驱动程序相同的 12 种不同的*BarnaCore*驱动程序方法,但作为kUnimplemented存根),并且 SparseCore DMA 结构仍命名为DMA_CORE_ID_BARNA_CORE_0..3/DMA_MEMORY_ID_BMEM。Gxc/Glc/Gfc(Ghostlite /6acc60406) 驱动程序完全放弃 BarnaCore vfuncs。它们是枚举标识 + ABI + DMA 路由反向兼容。请参阅 退休证明。
| 这是什么 | Pre-SparseCore 片上嵌入/稀疏聚集协处理器,与 TensorCore 位于同一位置,共享 HBM |
| 个性 | BCS — BarnaCore 标量 定序器 (Pufferfish) · BCAH — BarnaCore 地址处理程序 (Jellyfish/Dragonfish) |
| 定序器枚举 | tpu::TpuSequencerType — TC=0,BCS=1,BCAH=2,然后 SCS=3 / TAC=4 / TEC=5 (SparseCore) |
| 编解码器/编码器根 | pxc::pfc::isa::BarnaCore{Sequencer,Channel}CodecBase(河豚)·jellyfish::isa::EncoderBcsDf(JF/DF) |
| 具有 BC 的一代 | 水母 (BCAH) · 龙鱼 (BCAH) · 河豚 (BCS + Channel) |
| 不带 BC 的一代 | Viperfish / Ghostlite / 6acc60406 — SparseCore 时代(参见 SparseCore 概述) |
| 内存 | barna_core_bmem(工作缓冲区)·barna_core_smem(标量)·barna_core_sflag(同步)·barna_core_imem(指令) |
| 信心 | 已确认(符号表锚定),除非行或标注另有说明 |
BarnaCore 是什么以及为什么它是独立的
TensorCore 是一种围绕脉动矩阵单元构建的静态调度 VLIW 机器;当数据以密集的切片形式从 HBM 连续流出时,效果最佳。大量嵌入的模型打破了这一假设:主要成本不是 matmul FLOP,而是“指针追逐”——从包含数百万行的表中读取几行,其中哪些行被触及是数据相关的,并且会更改每个小批量,并在向后传递时将梯度累积回任意 HBM 行。 BarnaCore 的存在正是为了吸收 TpuVersion 0–2 (TPU v2–v4) 芯片上的流量,就像 SparseCore 在 v5+ 上所做的那样。
二进制文件直接记录切换路径。 Pufferfish端的嵌入管道贯穿barna_core::BcsLloEmitter:IssueDmaInfeedToVmem收集组装好的嵌入块并将它们DMA输入到TensorCore的VMEM中,WaitForInfeedToVmemDma是TC端完成等待,IssueDmaScatter / IssueDmaScatterOne是梯度写回路径。这与 SparseCore 嵌入管道的形状相同(收集 → DMA 到 VMEM → 同步标志 → 向后分散)——只有 ISA、束宽度和同步模型不同。
注意 — BarnaCore 是它自己的 ISA 系列,而不是 TensorCore 模式。 Pufferfish 具有完全独立的
asic_sw::deepsea::pxc::pfc::isa::BarnaCoreSequencerCodecBase和BarnaCoreChannelCodecBase类根以及专用的 LLVM 子目标TPUBcSubtarget;二进制文件中的 LLVM 诊断字符串将 BarnaCore 描述为“具有非常不同的 ISA”的引擎。 Jellyfish/Dragonfish 在传统 TensorCore 编码器 vtable (EncodeBarnaCoreAddressHandlerScalarSlot) 上携带jellyfish::isa::EncoderBcsDf叶子和 BarnaCore 特定插槽。将 BarnaCore 建模为额外 TensorCore 插槽的重新实现者将不会生成可编码的 BC 程序。
两种人格 — BCS 和 BCAH
BarnaCore 的结构是一个控制/计算 定序器,与专用的 地址处理程序 配对(在拥有它的一代上)。两者在二进制文件中通过 tpu::TpuSequencerType 枚举进行区分,编码器模板将其作为非类型参数携带并进行 TpuSequencerTypeToString 渲染。 BarnaCore 占据两个最低的非 TensorCore 序列器类型插槽 - 按时间顺序退休指纹,因为它早于枚举中的 SparseCore。
| 枚举 | TpuSequencerType 文字 | 短 | 捆绑包 | 角色 |
|---|---|---|---|---|
| 0 | TPU_SEQUENCER_TYPE_TENSOR_CORE_SEQUENCER | TC | (每代) | 密集矩阵音序器 — 所有世代 |
| 1 | TPU_SEQUENCER_TYPE_BARNA_CORE_SEQUENCER | BCS | 32 B | BarnaCore 标量控制/计算定序器 (Pufferfish) |
| 2 | TPU_SEQUENCER_TYPE_BARNA_CORE_ADDRESS_HANDLER | BCAH | 16 B | 用于嵌入查找的地址生成(JF/DF) |
| 3 | TPU_SEQUENCER_TYPE_SPARSE_CORE_SEQUENCER | SCS | 32 B | SparseCore 标量排序器 (v5+) |
| 4 | TPU_SEQUENCER_TYPE_SPARSE_CORE_TILE_ACCESS_CORE_… | TAC | 64 B | SparseCore 切片访问/DMA 发行者 (Viperfish) |
| 5 | TPU_SEQUENCER_TYPE_SPARSE_CORE_TILE_EXECUTE_CORE_… | TEC | 64 B | SparseCore向量计算(v5+) |
BCS — BarnaCore 标量音序器 (Pufferfish)。 BCS 是完全独立的 VLIW 机器。反编译的 pfc::isa 符号公开了一个双标量管道 - BarnaCoreSequencerScalar0_* 和 BarnaCoreSequencerScalar1_* - 每个都携带相同的操作集(整数加/减、标量和/或/异或/移动、分支/调用、浮点比较、同步系列 SyncAdd / SyncEqualTo / SyncLessThan / SyncGreaterThan / SyncDone 和 IssueFsm;FSM 完成等待操作码出现在 BARNA_CORE_SCALAR_SYNC_DONE_READ / _WRITE 枚举中)。除此之外,一个单独的 BarnaCore Channel 向量单元公开了 BarnaCoreChannelVectorAlu0_* / VectorAlu1_* - 一个广泛的名册,包括 VectorMove / VectorAnd / VectorOr / VectorXor、整数和浮点加/减/乘、完整的比较系列和超越数(VectorTanh、VectorReciprocal、VectorReciprocalSquareRoot、VectorLog2、VectorPow2)。两个标量管道每个带有 SyncAdd 结构是 SparseCore 的 SparseCoreScalarAlu0 / Alu1 的直接祖先。 BCS捆绑包为32字节;标量 ISA 和合并 ALU 位布局位于各自的页面上。请参见 BCS 32 字节捆绑包、BCS Scalar0/Scalar1 ISA 和 合并 ALU 位布局。
BCAH — BarnaCore 地址处理程序(Jellyfish/Dragonfish)。 JF/DF 没有独立的嵌入定序器。 BarnaCore 的工作是通过 16 字节地址处理程序捆绑流驱动的,TensorCore 排序器本身发出查找; BCAH 只处理地址生成。证据是,每代 TensorCore 编码器 jellyfish::isa::EncoderJf 和 EncoderDf 均携带一个 EncodeBarnaCoreAddressHandlerScalarSlot(BarnaCoreAddressHandlerBundle const&, …) 方法(加上 …ScalarSlotHelper 和VectorAlu/VectorLoad/VectorStore/VectorResult/Bundle 系列)—BarnaCore 地址处理程序编码器内联内置于 TensorCore 编码器中,而不是内置于完全独立的引擎中。 JF/DF 地址处理程序捆绑类型实际上是 BarnaCoreAddressHandlerBundle。请参阅 JF/DF 16 字节地址处理程序包。
明白了 -
EncoderBcsDf符号名称与其个性不匹配。 JF/DF BarnaCore 编码器叶符号是EncoderBcsDf,其中“Bcs”读作“BarnaCore Sequencer”(seq=1) - 但TpuSequencerType存在枚举将 Jellyfish/Dragonfish 牢牢置于BCAH(seq=2,16 字节捆绑),JF/DF 路径上的实际编码方法采用BarnaCoreAddressHandlerBundle(地址处理程序 类型)。存在矩阵具有权威性:JF/DF BarnaCore 是 16 字节地址处理程序特性,无论符号所暗示的缩写是什么。全序列标签仅在河豚 (pufferfish::isa::EncoderPfBarnaCoreSequencer) 上才是正品。 [置信度:高——记录了符号名称与存在矩阵的张力,但功能事实是可靠的。]
每代存在
BarnaCore 是 TpuVersion 0–2(水母/龙鱼/河豚)功能。存在的个性本身是每一代的,并且是重新实现者必须编码的最重要的事实。鉴别器是系列命名空间:BarnaCore 编解码器/编码器类的范围属于每代 asic_sw::deepsea 系列命名空间 — jxc (Jellyfish/Dragonfish) 和 pxc/pfc (Pufferfish) — 并且它们在下不存在vxc/vfc、gxc/glc、gxc/gfc 是 v5+ 没有 BarnaCore 的直接二进制读出。
TpuVersion | 代号 | 外部名称 | 系列ns | BCS | BCAH | BC 捆绑包 | 嵌入引擎 | 注释 |
|---|---|---|---|---|---|---|---|---|
| 0 | 水母 | TPU v2 | jxc | – | Y | 16 B | BarnaCore 仅 | BCAH; TC 定序器发出查找 |
| 1 | 龙鱼 | TPU v3 | jxc | – | Y | 16 B | BarnaCore 仅 | 逐字重用 Jellyfish 编解码器 |
| 2 | 河豚 | TPU v4 | pxc/pfc | Y | – | 32 B | BarnaCore 仅 | 完整 BCS 定序器 + 通道;最后一代BC |
| 3 | 毒蛇鱼 | TPU v5e | vxc/vfc | – | – | — | SparseCore | 无 BarnaCore;控制平面 vfunc 作为存根存在 |
| 4 | Ghostlite | TPU v6 精简版 | gxc/glc | – | – | — | SparseCore | 无 BarnaCore; vfuncs 已删除 |
| 5 | 6acc60406 | TPU7x | gxc/gfc | – | – | — | SparseCore | 无 BarnaCore; vfuncs 已删除 |
注意 — 代号 /
TpuVersion/ 外部名称映射。TpuVersion序数和硅代号都是文字二进制读数:TpuVersionToString(0x20b3a480) 映射0→jellyfish、1→dragonfish、2→pufferfish、3→viperfish、4→ghostlite、5→6acc60406。外部名称列 (TPU v2/v3/v4/v5e/v6 lite/TPU7x) 遵循同级 ISA 概述 固定的约定。第六代代号是二进制文件的文字6acc60406— 营销名称 Trillium 和 Ironwood 在libtpu.so中出现零次。二进制键是代号系列命名空间和TpuVersion序数上的所有内容,而不是外部名称 - 将代号 + 系列命名空间视为权威鉴别器。 [信心:已确认代号 /TpuVersion/ 系列命名空间映射;外部名称列为高。]
反编译交叉检查 — 按系列划分的 BarnaCore ISA 符号
直接根据分解符号表 (nm -C libtpu.so) 确认存在矩阵。 Pufferfish(pfc)命名空间承载了丰富的BarnaCore ISA; v5+ 系列命名空间不包含任何命名空间。下面的计数是此版本中的分解符号命中计数;它们索引的是相对规模,而不是固定的 ABI 合约,因此确切的值会随着构建而变化。
| 符号模式 | 哪里 | 计数(此版本) | 阅读 |
|---|---|---|---|
BarnaCore/barna_core(所有符号) | 二进制范围 | ~17,900 | BarnaCore 是一个大型实时子系统 |
pfc/pufferfish BarnaCore 符号 Pufferfish 上的 | pxc/pfc | ~8,700 | 完整 BCS 排序器 + Channel ISA |
BarnaCoreSequencerScalar0_SyncAdd / Scalar1_SyncAdd | pfc::isa | 23 / 23 | 双标量管道已确认(BCS) |
BarnaCoreSequencerCodecBase / BarnaCoreChannelCodecBase | pfc::isa | 24 / 24 | Pufferfish 全 VLIW 编解码器根存在 |
EncoderBcsDf | jellyfish::isa | 18 | JF/DF 地址处理程序编码器叶 |
EncoderPfBarnaCoreSequencer / EncoderPfBarnaCoreChannel | pufferfish::isa | 20 / 20 | 河豚 BCS + 通道编码器叶 |
(vfc|glc|gfc)::…BarnaCore* | v5+系列 | 0 | Viperfish / Ghostlite / 6acc60406 上没有实时 BarnaCore |
vfc / glc / gfc 中任何一个下的零 BarnaCore 符号是 BarnaCore 仅包含 JF/DF/PF 的最干净的单一数据。 (唯一的 v5+ 异常值是 vxc::HardwareAttributes::GetNumberOfBarnaCores() 和 gxc 等效项 — 返回 0 的硬件属性查询,而不是 ISA 编码器。)相反,~8.7 K Pufferfish BarnaCore 符号(完整的定序器 + 通道名册),针对 Jellyfish/Dragonfish 上的仅地址处理程序编码器叶子,将BCS/BCAH 性格分裂。支持 LLVM 后端的工件 - TPUBcSubtarget 子目标、BarnaCoreSyncFsmInstructionBitfieldsRefImpl 同步 FSM 编码器和 barna_core::BcsLloEmitter 嵌入 DMA 发射器 - 均已存在且采用 Pufferfish 键控。
已确认 — BarnaCore 和 SparseCore 是互斥的,每代一个。 此二进制文件中没有哪一代同时附带实时 BarnaCore 和实时 SparseCore。
TpuVersion0/1/2(水母/龙鱼/河豚)搭载 BarnaCore,无 SparseCore;TpuVersion3/4/5 (Viperfish/Ghostlite/6acc60406) 搭载 SparseCore,但不搭载 BarnaCore。交换仅在TpuVersion2→3(河豚→毒蛇)边界处发生一次。完整的残留与缺失的细分位于 退休证明。
嵌入数据路径
BarnaCore 存在的原因是嵌入查找,高级流程与 SparseCore 继承的流程相同:将驻留主机的嵌入表移动到 HBM,根据需要将行收集到 BarnaCore 的私有工作缓冲区中,将组装的图块 DMA 输入到 TensorCore 的 VMEM 中,并在向后传递时将梯度分散回 HBM。
HOST HBM (shared TC/BC) BARNACORE TENSORCORE
──── ────────────────── ───────── ──────────
embedding tables ─load─▶ embedding rows matmul / MLP
(GB-scale, indirect)
│
index stream ─────┤ BCAH (JF/DF) / address generation
▼ BCS (PF) sequence + lookup DMA
[HBM row r_i] ──gather──▶ barna_core_bmem ◀── row tiles
(working buffer, MS tier)
│
BcsLloEmitter::IssueDmaInfeedToVmem
───────────────────────────────────▶ VMEM
│ WaitForInfeedToVmemDma consume
── backward pass ── ▼ │
[HBM row r_i] ◀── BcsLloEmitter::IssueDmaScatter[One] ◀──── gradients
```text
BarnaCore 拥有自己的四层私有内存层次结构,镜像在全局 `MemorySpace` 枚举中,并从 `MemorySpaceToString` 罗数据表中恢复:**`barna_core_bmem`**(嵌入图块/工作缓冲区 - 与 SparseCore 的 `TILE_SPMEM` 类似), **`barna_core_smem`**(标量存储器)、**`barna_core_sflag`**(其自己的同步标志/原子寄存器文件)和**`barna_core_imem`**(指令存储器)。 TensorCore 切换使用 DMA 进入 VMEM 以及 BarnaCore 同步表面。
同步是 BarnaCore 与其后继者最大的不同之处。 BarnaCore 运行一个**硬连线同步 FSM** — `isa::BarnaCoreSyncFsmInstructionBitfieldsRefImpl` 加上程序补丁修复 `barna_core::fsm_program_patch_functions::UpdateSyncFlagWaitAndClear`(它将 wait-then-clear 融合到一个 FSM 指令中) — 以及一个双 `Scalar0`/`Scalar1` `SyncAdd`,一个 BarnaCore 侧存储栅栏`LloRegionBuilder::BcSfence`,和专用捆绑栅栏插槽(`BundleRequirement::add_bc_sfence_slots`)。 SparseCore 用软件可见的同步模型取代了这个固定的 FSM。 FSM 与软件同步的差异是退役的架构原因之一;全套位于 [退休证明](retirement.md)。
> **注意 — BarnaCore↔SparseCore 对应是功能性的,而不是二进制兼容的。** 两个引擎执行相同的工作 — 针对密集 MXU 无法服务的 HBM 嵌入聚集/查找/分散添加。结构谱系是一对一的(BCS↔SCS、BCAH↔TAC、`barna_core_bmem`↔`TILE_SPMEM`、`IssueDmaScatter`↔`STREAM_OPCODE_SCATTER_FLOAT_ADD`),但BarnaCore程序和SparseCore程序不可互换:不同的ISA、不同的捆绑宽度、不同的同步模型。 SparseCore 是对相同功能角色的彻底重新设计,而不是 BarnaCore 的扩展。
---
## BarnaCore子部分是如何组织的
第 IX 部分的 BarnaCore 子部分保持引擎的完整性。这个概述修复了方向、个性分裂和每代的存在;深层机制分散到同级页面:
- **[退休证明](retirement.md)** — 端到端 BarnaCore → SparseCore 转换:合并的存在矩阵(一致的独立枚举),残留与不存在的分解(什么会永远存在:`TpuSequencerType` 1/2; `Set*BarnaCore*`/`Enable*BarnaCore*` 驱动程序 vfuncs 作为 Viperfish 驱动程序上的存根,落在 `gxc`/`glc`/`gfc` 上; `barna_core_{bmem,smem,sflag,imem}` `MemorySpace` 枚举插槽),以及从 ISA 增量推断的架构原因。
- **[BCS 32 字节捆绑包](bcs-32byte-bundle.md)** — Pufferfish BCS VLIW 捆绑布局、`InstBits_BarnaCorePxcHwMode` 指令编码表和 BCS 元数据访问器。
- **[BCS Scalar0/Scalar1 ISA](bcs-scalar-isa.md)** — 双标量控制 + 内存操作码名册(`BarnaCoreSequencerScalar0/1_*` 操作集)。
- **[合并 ALU 位布局](merged-alu.md)** — BarnaCore 合并 ALU 的每槽字段编码(向量结果目标、基地址编码)。
- **[每代 BarnaCore 性能网格](per-gen-perf-grids.md)** — 每代 BarnaCore 性能/成本网格(`PufferfishBarnaCorePerformance` 变体)。
- **[JF/DF 16 字节地址处理程序包](jf-df-address-handler-bundle.md)** — Jellyfish/Dragonfish BCAH 16 字节捆绑包和 `EncodeBarnaCoreAddressHandler` 插槽编码器。
从 Viperfish 开始取代 BarnaCore 的后继引擎记录在 [SparseCore 概述](../sparsecore/overview.md) 中。 BarnaCore 交给的 TensorCore ISA 是 [ISA 概述](../isa/overview.md)。
---
## 置信度总结
| 索赔 | 证据 |
|---|---|
| BarnaCore 仅在 Jellyfish / Dragonfish / Pufferfish 上发货 | `EncoderBcsDf` 下的 `jellyfish::isa`; `pfc`/`pufferfish` BarnaCore 符号 (~8.7 K); **零** `vfc`/`glc`/`gfc` 下的 BarnaCore 符号 |
| 两种人格:BCS(seq=1、32 B、河豚)和BCAH(seq=2、16 B、JF/DF) | `TpuSequencerTypeToString`指针表(idx 1→`BarnaCoreSequencer`,idx 2→`BarnaCoreAddressHandler`); `EncoderPfBarnaCoreSequencer` (PF) 与 `EncoderJf`/`EncoderDf::EncodeBarnaCoreAddressHandlerScalarSlot` (JF/DF) |
| Pufferfish BCS 是一款完全独立的 VLIW 机器 | `pxc::pfc::isa::BarnaCoreSequencerCodecBase` + `BarnaCoreChannelCodecBase`;双 `Scalar0/1_SyncAdd`; `TPUBcSubtarget` |
| `EncoderBcsDf` 符号名称与 JF/DF 上的 BCAH 存在矩阵张力 | `Bcs` 读作“BarnaCore Sequencer”; JF/DF编码方式取`BarnaCoreAddressHandlerBundle`;存在矩阵说 BCAH |
| BarnaCore 嵌入路径:收集 → DMA 馈入 VMEM → 向后分散 | `barna_core::BcsLloEmitter::{IssueDmaInfeedToVmem,WaitForInfeedToVmemDma,IssueDmaScatter,IssueDmaScatterOne}` |
| 四个 BarnaCore 内存层 `barna_core_{bmem,smem,sflag,imem}` | `xla::jellyfish::MemorySpaceToString` (`0x1d6ffae0`) 指针表 — 枚举索引 8→11 正是这个顺序 |
| 硬连线同步 FSM(与 SparseCore 软件同步) | `BarnaCoreSyncFsmInstructionBitfieldsRefImpl`; `fsm_program_patch_functions::UpdateSyncFlagWaitAndClear`; `BcSfence` + `add_bc_sfence_slots` |
| BC 和 SC 是互斥的——每代一个,在河豚→蝰蛇(`TpuVersion` 2→3)交换 | 存在矩阵;没有哪一代同时具有 live BC 和 live SC 编解码器 |
| Pufferfish BC 有自己的 181 KB LLVM 编码表 `InstBits_BarnaCorePxcHwMode` | `nm -S`:`TPUMCCodeEmitter::getBinaryCodeForInstr` 中的静态本地rodata,大小 `0x2c460` = 181,344 字节,HwMode 门控 |
| 代号 / `TpuVersion` / 外部名称映射 | `TpuVersionToString` (`0x20b3a480`)指针表 → `0..5` = 水母/龙鱼/河豚/毒蛇鱼/ghostlite/`6acc60406`;外部名称遵循 [ISA 概述](../isa/overview.md) |
---
## 交叉引用
- [退休证明](retirement.md) — BarnaCore → SparseCore 过渡、残留与缺席细分以及退休理由。
- [BCS 32 字节捆绑包](bcs-32byte-bundle.md) — Pufferfish BCS VLIW 捆绑布局和 `InstBits_BarnaCorePxcHwMode`。
- [BCS Scalar0/Scalar1 ISA](bcs-scalar-isa.md) — 双标量控制 + 内存操作码名册。
- [合并 ALU 位布局](merged-alu.md) — BarnaCore 合并 ALU 的每插槽字段编码。
- [每代 BarnaCore 性能网格](per-gen-perf-grids.md) — 每一代 BarnaCore 性能/成本网格。
- [JF/DF 16 字节地址处理程序包](jf-df-address-handler-bundle.md) — Jellyfish/Dragonfish BCAH 捆绑包及其插槽编码器。
- [SparseCore 概述](../sparsecore/overview.md) — 从 Viperfish 开始取代 BarnaCore 的后继引擎。
- [ISA 概述](../isa/overview.md) — TensorCore VLIW ISA BarnaCore 移交给。
- **二进制:** `extracted/libtpu-0.0.40-cp314-cp314-manylinux_2_31_x86_64/libtpu/libtpu.so`(构建 ID `89edbbe81c5b328a958fe628a9f2207d`)
- **索引条目:** 第九部分 — SparseCore 和 BarnaCore / BarnaCore(旧版 v2–v4) — [返回索引](../index.md)