退休证明
此页面上的每个状态存根主体、错误字符串、源代码行标记、每代符号存在、嵌入操作名称和
GetNumberOfBarnaCores返回值都是从libtpu-0.0.40-cp314轮中的libtpu.so(构建 ID89edbbe81c5b328a958fe628a9f2207d)中读取的 - 来自分解的 C++ 符号表(nm -C)、嵌入的原型/操作名称字符串以及每个系列TpuCore<Fam>DriverImplBarnaCore 方法和<fam>::HardwareAttributes::GetNumberOfBarnaCores访问器的反编译主体。地址适用于此版本;其他版本有所不同。
摘要
BarnaCore 是 TPU 的传统嵌入/稀疏查找协处理器 - SparseCore 所取代的引擎。 它是该二进制文件所知道的最古老的三个代(Jellyfish、Dragonfish、Pufferfish)上的实时硅片,并且在 Viperfish 及更高版本上“退休”,SparseCore 执行相同的工作。此页面是退役的二进制证明 - 不是 BarnaCore 架构本身(概述、BCS 标量 ISA、合并 ALU 布局、每代性能网格 拥有它),也不是 SparseCore 替代引擎(SparseCore 概述 拥有它)。此页面拥有的是引擎在 v3+(Viperfish 及更高版本)上已失效的证据,来自对二进制文件的三个独立读数,所有人都同意。
第一个读数是运行时驱动程序存根主体。 tpu::TpuCore 驱动程序带有 12 种方法的 BarnaCore 控制平面(SetBarnaCoreRowLength、EnableBarnaCore、SetBarnaCoreAddressHandlerProgram 等),但仅在此二进制文件中存在的三个驱动程序实现上:TpuCoreJxcDriverImpl(Jellyfish/Dragonfish)、TpuCorePxcDriverImpl (河豚)和 TpuCoreVxcDriverImpl(蝰鱼,TpuVersion 3)。 没有 TpuCoreGxcDriverImpl; Ghostlite/6acc60406 系列(gxc、TpuVersion 4/5)携带硬件属性对象,但根本没有 BarnaCore 驱动程序方法。在 Viperfish 驱动程序上,这 12 种方法中的每一种都是返回 "Not implemented in Viperfish."(状态代码 kUnimplemented = 12)的单行错误存根,而相应的 Jxc/Pxc 主体是真正的寄存器编程代码。因此,该痕迹作为存根但存在的 ABI 到达 Viperfish,然后在 gxc 上完全消失。
第二个读数是每代符号存在证明。 BarnaCore 编码器/编解码器/ISA 符号大量存在于旧系列命名空间下 - jxc/jellyfish 和 pxc/pfc(EncoderBcsDf、EncoderPfBarnaCoreSequencer、EncoderPfBarnaCoreChannel) - 并且数量恰好为零 vxc/vfc/gxc/glc/gfc。硬件计数访问器以数字方式确认:pfc::HardwareAttributes::GetNumberOfBarnaCores() 返回 4,而 vxc:: 和 gxc::HardwareAttributes::GetNumberOfBarnaCores() 均返回 0。
第三个读数是降低的嵌入操作。驱动 BarnaCore 管道的设备路径 TPUEmbedding 操作系列(Enqueue* / Recv*Activations / Send*Gradients 查找操作)在 v3+ 上通过 SparseCore XlaSparseDenseMatmul* 原语系列和 SparseDenseMatmulDotCombinerEmitter 而不是 BarnaCore 降低barna_core::BcsLloEmitter。 BarnaCore 时代的 11 个优化器参数 API 缩减为 5 个优化器 SparseCore 集,因为优化器数学转移到了 SparseCore TEC 引擎上。
重新实现,合约为:
- BarnaCore 控制平面仅作为存根存在于 Viperfish。 Jxc/Pxc 驱动程序(实体)和 Vxc/Viperfish 驱动程序(
kUnimplemented存根)上存在十二个*BarnaCore*驱动程序方法,然后被删除 —gxc(Ghostlite/6acc60406) 系列没有携带它们的 TpuCore 驱动程序 impl。在 Viperfish 上,存根必须失败关闭(kUnimplemented,不是静默无操作);在 Viperfish 目标上调用其中任何一个都是设计上的硬错误。 - 每代存在是符号命名空间读数。 Live BarnaCore = 范围在
jxc(v0/v1) 或pxc.pfc(v2) 下的非空EncoderBcsDf/EncoderPf*BarnaCore*编解码器名册。 v3+ 没有 BarnaCore 编解码器、编码器、ISA 表或子目标。鉴别器是系列名称空间加上GetNumberOfBarnaCores() != 0。 - 嵌入操作集退休到 SparseCore 原语,而不是 BarnaCore。 在 v3+ 上,设备路径嵌入操作低于
XlaSparseDenseMatmul{,GradWith<Opt>}和SparseDenseMatmulDotCombinerEmitter。永远不会到达 BarnaCoreBcsLloEmitter聚集/分散/馈送路径。
| 此页证明了什么 | BarnaCore 是 Viperfish、Ghostlite 和 6acc60406 上的“已退役”引擎 — 以 ABI/enum 痕迹形式存在,以硅形式缺失 |
| 直播 | 水母 (v0) · 龙鱼 (v1) · 河豚 (v2) — GetNumberOfBarnaCores() ∈ {≥1, 4} |
| 退休日期 | Viperfish (v3) · Ghostlite (v4) · 6acc60406 (v5) — GetNumberOfBarnaCores() = 0;零 BC 编解码器 |
| 存根证据 | 12× TpuCoreVxcDriverImpl::*BarnaCore* 方法 → "Not implemented in Viperfish." (MakeErrorImpl<12>); gxc 系列完全放弃了它们 |
| 符号存在证明 | BC 编码器/编解码器符号出现在 jxc 和 pxc/pfc 上; vfc/glc/gfc 上的 零 |
| 更换 | SparseCore (XlaSparseDenseMatmul* + SparseDenseMatmulDotCombinerEmitter) — 参见 SparseCore 概述 |
| 信心 | 已确认(反编译的存根主体 + 符号计数 + 返回值常量),除非行或标注另有说明 |
注意 — 此页面拥有退役证据,而不是引擎。 BarnaCore 架构由 概述 及其 ISA 兄弟拥有; SparseCore 概述 的 SparseCore 替代引擎;由 SampleCombiner发射器 接管嵌入减少的 SparseCore 组合器。它们是相互联系的,而不是重复的。
证据 1 — Viperfish 驱动程序存根主体
tpu::TpuCore 运行时驱动程序将 BarnaCore 控制平面公开为连续方法块(概述 下记录的每系列覆盖区域)。方法 names 是 BarnaCore 特定的,并且 slots 存在于该二进制文件的三个驱动程序实现上 - TpuCoreJxcDriverImpl(Jellyfish/Dragonfish,v0/v1)、TpuCorePxcDriverImpl(Pufferfish,v2)和 TpuCoreVxcDriverImpl(Viperfish,v3)。 gxc(Ghostlite/6acc60406,v4/v5)系列没有驱动程序实现,因此控制平面仅以 Viperfish 结束。
改变的是身体。在 Viperfish 驱动程序上,每个 BarnaCore 方法都是单行错误返回。逐字反编译:
// _ZN3tpu20TpuCoreVxcDriverImpl15EnableBarnaCoreEv @ 0x1d118cc0
__int64 tpu::TpuCoreVxcDriverImpl::EnableBarnaCore(tpu::TpuCoreVxcDriverImpl *this)
{
return absl::status_internal::MakeErrorImpl<12>(
"Not implemented in Viperfish.", 29, 185,
"learning/45eac/tpu/runtime/hal/internal/vxc/tpu_core_vxc_driver_impl.cc");
}
// _ZN3tpu20TpuCoreVxcDriverImpl21SetBarnaCoreRowLengthEi @ 0x1d118be0
__int64 tpu::TpuCoreVxcDriverImpl::SetBarnaCoreRowLength(tpu::TpuCoreVxcDriverImpl *this)
{
return absl::status_internal::MakeErrorImpl<12>(
"Not implemented in Viperfish.", 29, 146,
"learning/45eac/tpu/runtime/hal/internal/vxc/tpu_core_vxc_driver_impl.cc");
}
```text
`MakeErrorImpl<12>` 构造一个 `absl::Status`,代码为 `12` — `absl::StatusCode::kUnimplemented`。 `29` 是消息长度 (`"Not implemented in Viperfish."`),尾随整数是 `tpu_core_vxc_driver_impl.cc` 中的源行。 Vxc 驱动程序上的所有 12 个 BarnaCore 方法覆盖在形状上都是字节相同的,仅源代码行不同:
| Vxc方法 | `.text` | 源线 | 本体 |
|---|---|---:|---|
| `SetBarnaCoreRowLength` | `0x1d118be0` | 146 | `kUnimplemented "Not implemented in Viperfish."` |
| `SetBarnaCoreAddressHandlerProgram` | `0x1d118c00` | 152 | `kUnimplemented` |
| `SetBarnaCoreFeatureInfo` | `0x1d118c20` | 160 | `kUnimplemented` |
| `SetBarnaCoreFeatureAddress` | `0x1d118c40` | 165 | `kUnimplemented` |
| `SetBarnaCoreFeaturePCs` | `0x1d118c60` | 171 | `kUnimplemented` |
| `SetBarnaCorePseudoChannelBit` | `0x1d118c80` | 176 | `kUnimplemented` |
| `SetBarnaCoreErrorMask` | `0x1d118ca0` | 181 | `kUnimplemented` |
| `EnableBarnaCore` | `0x1d118cc0` | 185 | `kUnimplemented` |
| `EnableBarnaCoreHbmMuxWorkaround` | `0x1d118ce0` | 189 | `kUnimplemented` |
| `SetBarnaCoreHbmMuxNodeFabricModeTimer` | `0x1d118d00` | 194 | `kUnimplemented` |
| `SetBarnaCoreHbmMuxBfifoModeTimer` | `0x1d118d20` | 199 | `kUnimplemented` |
| `GetBarnaCoreLastIssuedInstructionTag` | `0x1d118d40` | 204 | `kUnimplemented` |
顺序源代码行范围(146 → 204,`.text` 地址单调)显示这些不是分散的临时存根,而是在 Viperfish 驱动程序源代码中的一个位置写入的*连续的“此引擎已消失”存根块* — 退役的运行时端指纹。 (已确认:`nm -C` 在 `0x1d118be0`–`0x1d118d40` 处准确找到 12 个 `TpuCoreVxcDriverImpl::*BarnaCore*` 符号,与 `TpuCorePxcDriverImpl` 上的 12 个符号匹配。`TpuCoreJxcDriverImpl` 与 **13** `*BarnaCore*` 符号匹配,但计数是一个转移注意力的事情:恰好是 **12 个`t` 文本部分方法** — 相同的十二个方法名称 — 第十三个是 `d` *数据* 符号 (`0x22256a08`),`SetBarnaCoreAddressHandlerProgram` 内的静态本地 `…::$_0::…::site` lambda 捕获,而不是方法。因此,Jxc 具有与 Pxc/Vxc 相同的十二个不同的 BarnaCore 方法,加上一个内联 lambda 静态;它不是第十三种方法,也不是重载。)
### 对比——活体水母体
Jellyfish 驱动程序上的相同方法是真正的寄存器编程代码,而不是存根:
```c
// _ZN3tpu20TpuCoreJxcDriverImpl15EnableBarnaCoreEv @ 0xe735540
__int64 tpu::TpuCoreJxcDriverImpl::EnableBarnaCore(tpu::TpuCoreJxcDriverImpl *this)
{
if ( **(_DWORD **)(**((_QWORD **)this + 1) + 8LL) != 1 ) // gate on chip state
return (*(... **)(**((_QWORD **)this + 101) + 296LL))(*((_QWORD *)this + 101), 2);
v1 = (*(... **)(**((_QWORD **)this + 101) + 352LL))(*((_QWORD *)this + 101), 0); // HW write
if ( v1 == 1 )
return (*(... **)(**((_QWORD **)this + 101) + 296LL))(*((_QWORD *)this + 101), 2);
inited = util::StatusBuilder::InitRepImpl(v1);
return util::StatusBuilder::CreateStatusAndConditionallyLog(
257, "learning/45eac/tpu/runtime/hal/internal/jxc/tpu_core_jxc_driver_impl.cc", inited);
}Jxc 主体通过芯片寄存器接口(+296 / +352 vtable 间接到 this+101 的寄存器后端)进行调度,以实际启用 BarnaCore — 正是 live 引擎的 Enable 所具有的那种主体。 Pxc(河豚)驾驶员同样携带真实的身体。因此,退休边界在 Vxc / Jxc-Pxc 驱动程序中的同名方法上可见为 stub-body 与 real-body,然后在 gxc (Ghostlite/6acc60406) 系列上显示为 no-method-at-all。
已确认 — 在 Viperfish 上,BarnaCore 控制平面作为存根存在;在
gxc上它消失了。 Vxc 驱动程序上的 12 个方法重写是返回kUnimplemented的真实符号;gxc系列提供硬件属性对象 (GetNumberOfBarnaCores() == 0),但没有 TpuCore 驱动程序 impl,因此没有 BarnaCore 方法。这是字节确认的:相同的分解方法名称,jxc/pxc上的真实主体,vxc上的"Not implemented in Viperfish.",gxc上不存在。
证据 2 — 每代符号存在证明
第二个独立证明是对每代家族命名空间的 BarnaCore 引擎 符号(编码器、编解码器、ISA 类)进行普查。实时引擎会提供编解码器/编码器名册;退役的一艘则不发货。按系列命名空间对 BarnaCore 命名的编码器/编解码器/ISA 类进行分桶,给出二进制存在/不存在分割:
| 系列ns | Gen(s) | BC编码器/编解码器/ISA符号 | GetNumberOfBarnaCores() | 判决书 |
|---|---|---|---|---|
jxc / jellyfish | 水母 (v0)、龙鱼 (v1) | 现有(数百) | (≥1, JF/DF) | 直播 |
pxc / pfc | 河豚 (v2) | 存在 (EncoderPfBarnaCore*) | 4 (pfc) | 直播 |
vxc / vfc | Viperfish (v3) | 无 | 0 (vxc) | 退休 |
gxc / glc | Ghostlite (v4) | 无 | 0 (gxc) | 退休 |
gxc / gfc | 6acc60406 (v5) | 无 | 0 (gxc) | 退休 |
v2→v3 边界处的分裂非常尖锐。传统系列包含 BarnaCore 编码器/编解码器/ISA 类; SparseCore-era 系列(vxc、gxc)携带 零 BarnaCore 编码器/编解码器/ISA 符号 - nm -C 在任何 v3+ 下都找不到名称中包含 BarnaCore 的 Encoder/Codec/isa 类系列(BarnaCore 上唯一的 v3+ 版本是 Vxc SetBarnaCoreAddressHandlerProgram 存根,其参数类型是 jellyfish::isa::ProgramFacade)。 没有 EncoderVfBarnaCore*,没有 vfc::isa::BarnaCore*Codec,没有 v3+ BarnaCore 子目标。
直播河豚 BarnaCore 编解码器名册
pxc/pfc BarnaCore 符号是 BarnaCore 的最高水平——完全独立的 VLIW 嵌入定序器。 pxc.pfc 中幸存的编码器叶子:
EncoderBcsDf ; v0/v1 BarnaCore (address-handler personality, 16-byte bundle)
EncoderPfBarnaCoreSequencer ; v2 BarnaCore Sequencer (BCS, seq=1, 32-byte VLIW bundle)
EncoderPfBarnaCoreChannel ; v2 BarnaCore Channel
```text
这些为 TPU MC 代码发射器 (`llvm::TPUMCCodeEmitter::getBinaryCodeForInstr` @ `0x13c74da0`) 提供数据,该发射器携带*第二人格*指令编码表 `InstBits_BarnaCorePxcHwMode`,由子目标 HwMode 位选择 - 整个 TPU 后端中唯一的 HwMode 门控 InstBits 表。任何 v3+ 系列都不存在 `InstBits_BarnaCore*HwMode`; BarnaCore 的退役也导致了嵌入协处理器 HwMode 机制的退役。 (ISA 表详细信息归 [BCS 标量 ISA](bcs-scalar-isa.md) 和 [合并 ALU 布局](merged-alu.md) 所有;此处它仅用作存在证据。)
### 数字计数访问器
最干净的单一数据是硬件属性访问器,它报告芯片有多少个 BarnaCore。主体是平凡的常数:
```c
// pxc::pfc::HardwareAttributesCommon<...>::GetNumberOfBarnaCores() @ 0x1fbac480
__int64 ...::GetNumberOfBarnaCores() { return 4; } // Pufferfish: 4 BarnaCores
// vxc::HardwareAttributes::GetNumberOfBarnaCores() @ 0x1fbad0e0
__int64 ...::GetNumberOfBarnaCores(... *this) { return 0; } // Viperfish: none
// gxc::HardwareAttributes::GetNumberOfBarnaCores() @ 0x1fda8b40
__int64 ...::GetNumberOfBarnaCores(... *this) { return 0; } // Ghostlite/6acc60406: nonePufferfish 报告 4 — 与 SparseCore DMA 结构的 DmaCoreId 枚举(四个 BarnaCore 核心 ID)中的 DMA_CORE_ID_BARNA_CORE_0..3 保留一致。 Viperfish 和 Ghostlite/6acc60406 系列均报告 0。 (pxc::plc 变体 @ 0x1fbacb00 还返回 0,即每个配置的 plc 属性对象,而不是 pfc 芯片属性;实时计数是 pfc return 4。)
发现 — Viperfish 仍然包含一些 BarnaCore 符号,但仅包含 ABI 痕迹。 在
nm -C中搜索与 Viperfish 关联的BarnaCore将返回 12 个TpuCoreVxcDriverImpl::*BarnaCore*方法存根(证据 1)以及单个vxc::HardwareAttributes::GetNumberOfBarnaCores() { return 0; }访问器 — 13 个符号,它们都不是编码器、编解码器、ISA 类或子目标。gxc(Ghostlite/6acc60406) 系列更加干净:它只有gxc::HardwareAttributes::GetNumberOfBarnaCores() { return 0; }访问器,根本没有驱动程序方法。 “v3+ 上的零实时 BarnaCore 引擎符号”表示零编解码器/编码器/ISA 符号;运行时 ABI 存根正是残留的证据 1 文档。
证据 3 — 降低的嵌入操作
第三个证明是嵌入操作集。 BarnaCore 的存在是为了执行推荐模型图发出的设备端嵌入查找/收集/分散。在 v3+ 上,这些相同的模型图操作通过 SparseCore 原语降低 - BarnaCore 嵌入发射器永远不会达到。
设备路径嵌入操作系列
此二进制文件中的 TPUEmbedding 操作系列分为主机设置带 (Configure* / Connect* / Collate*)、优化器参数分段带 (Load* / Retrieve*、11 个优化器) 和设备路径查找带 - 训练步骤实际上为每个小批量发出的操作。设备路径带,按确切的符号计数:
| # | Op | 角色 |
|---|---|---|
| 1 | EnqueueTPUEmbeddingBatchOp | 对密集批量查找进行排队 |
| 2 | EnqueueTPUEmbeddingIntegerBatchOp | 将整数 ID 批次入队 |
| 3 | EnqueueTPUEmbeddingSparseBatchOp | 将稀疏(索引/值)批次排队 |
| 4 | EnqueueTPUEmbeddingSparseTensorBatchOp | 将稀疏张量批次排队 |
| 5 | EnqueueTPUEmbeddingRaggedTensorBatchOp | 将不规则张量批次排队 |
| 6 | EnqueueTPUEmbeddingTensorBatchOp | 将密集张量批次入队 |
| 7 | EnqueueTPUEmbeddingArbitraryTensorBatchOp | 将任意张量批次入队 |
| 8 | CreateEnqueueTPUEmbeddingArbitraryTensorBatchOp | 固定状态排队构造函数 |
| 9 | DynamicEnqueueTPUEmbeddingArbitraryTensorBatchOp | 动态形状队列 |
| 10 | RecvTPUEmbeddingActivationsOp | 接收转发激活 |
| 11 | RecvTPUEmbeddingDeduplicationDataOp | 接收重复数据删除元数据 |
| 12 | SendTPUEmbeddingGradientsOp | 发送向后梯度 |
| 13 | LowerRecvTPUEmbeddingActivationsOp | 降低 (10) |
| 14 | LowerRecvTPUEmbeddingDeduplicationDataOp | 降低 (11) |
| 15 | LowerSendTPUEmbeddingGradientsOp | 降低 (12) |
| 16 | XlaRecvTPUEmbeddingActivationsOp | XLA 正向激活操作 |
| 17 | XlaRecvTPUEmbeddingDeduplicationDataOp | XLA 重复数据删除操作 |
| 18 | XlaSendTPUEmbeddingGradientsOp | XLA渐变运算 |
这是约 20 个操作的设备路径嵌入表面(按精确计数有 18 个不同的符号;圆形数字包括 Recv/Send 激活/梯度对及其重复数据删除同伴)。它们都是嵌入管道的“前端”,在 BarnaCore 芯片上,终止于 barna_core::BcsLloEmitter,而在 SparseCore 芯片上,终止于 SparseCore 组合器。
他们曾经下降的地方 - 现在他们下降的地方
两个发射器均以这一二进制形式发货;哪一个运行的是退休:
| 舞台 | BarnaCore 路径 (v0–v2) | SparseCore 路径 (v3–v5) |
|---|---|---|
| 嵌入聚集 | barna_core::BcsLloEmitter::IssueDmaInfeedToVmem (@ 0xf9d77e0) | SparseCore 流收集 → SparseDenseMatmulDotCombinerEmitter (合路器) |
| 每个样本减少 | 折叠到 BCS DMA 馈线中 | SparseDenseMatmulDotCombinerEmitter::EmitSampleCombiner (@ 0x1332c640) |
| 每个 id 循环 | BCS 定序器 FSM | ::EmitValencyLoop (@ 0x1332cee0) |
| 梯度分散相加 | BcsLloEmitter::IssueDmaScatter (@ 0xf9d8400) | STREAM_OPCODE_SCATTER_FLOAT_ADD(原子,HBM 内) |
| 查找原语 | (BarnaCore查找程序) | XlaSparseDenseMatmul{,WithCsrInput,WithStaticBufferSize}Op |
barna_core::BcsLloEmitter(IssueDmaScatter、IssueDmaScatterOne、IssueDmaInfeedToVmem、WaitForInfeedToVmemDma)是传统的查找发射器; SparseDenseMatmulDotCombinerEmitter(Emit / EmitSampleCombiner / EmitValencyLoop / EmitVectorizedLoop)是其替代品。两者都存在 - 二进制文件支持所有六代 - 但 v3+ 代码生成仅达到 SparseCore 一代。
优化器集缩小到 TEC
最清晰的“降低”信号是嵌入优化器集。 BarnaCore-era TF 参数 API 支持 11 优化器算法(每个算法都带有 Load*/Retrieve* 参数操作,有些带有 GradAccumDebug 变体):
Adadelta · Adagrad · ADAM · CenteredRMSProp · FTRL · MDLAdagradLight ·
Momentum · ProximalAdagrad · ProximalYogi · RMSProp · StochasticGradientDescent
```text
SparseCore 时代的运算系列包含一个更小的现代子集,因为优化器更新现在*在 SparseCore TEC 矢量引擎上*作为融合梯度运算而不是作为主机阶段参数表运行:
```text
XlaSparseCore: Adagrad · AdagradMomentum · Adam · Ftrl · Sgd (+ GraphConvolution)
XlaSparseDenseMatmulGradWith: Adagrad · AdagradMomentum · Adam · Ftrl · Sgd十一个主机级 BarnaCore 优化器分解为五个引擎上 SparseCore 优化器(XlaSparseDenseMatmulGradWith{Adagrad,AdagradMomentum,Adam,Ftrl,Sgd}AndCsrInputOp 及其 StaticBufferSize 变体)。旧版 Load/RetrieveTPUEmbedding<Opt>Parameters 操作保留在二进制文件中,以便与旧程序向后兼容,但 v3+ 嵌入更新不会通过它们进行路由。
注 — 两个发射器系列均发货; 达到一个是退休。
libtpu.so是一个服务于所有六代人的单一脂肪神器,因此它必然包含barna_core::BcsLloEmitter和SparseDenseMatmulDotCombinerEmitter。退役并不是“BarnaCore 发射器已从二进制文件中删除”,而是“没有任何 v3+ 目标的降低会选择它”。选择发生在上游,通过目标生成:Pufferfish 目标降低 BCS 发射器的嵌入; Viperfish+ 目标将它们降低到 SparseCore 组合器。本页记录了所发生的事情; SparseCore 组合器机制归 SampleCombiner发射器 所有。
放在一起——退休边界
这三个读数在 v2→v3(河豚→蝰蛇)边界处一致,有一个尖锐的切割:
| 代 | TpuVer | 系列ns | 驱动BC方法 | BC 编解码器符号 | #BarnaCores | 嵌入式发射器 | 状态 |
|---|---|---|---|---|---|---|---|
| 水母 | 0 | jxc | 实体(jxc驱动程序) | 存在 | ≥1 | BcsLloEmitter | 直播 |
| 龙鱼 | 1 | jxc | 实体(jxc驱动程序) | 目前(股份jxc) | ≥1 | BcsLloEmitter | 直播 |
| 河豚 | 2 | pxc.pfc | 实体(pxc驱动程序) | 存在 | 4 | BcsLloEmitter | 直播(高峰) |
| 毒蛇鱼 | 3 | vxc.vfc | "Not implemented in Viperfish."(12 个存根) | 0 | 0 | SparseDenseMatmulDotCombinerEmitter | 退休 |
| Ghostlite | 4 | gxc.glc | 无(无 gxc 驱动程序实现) | 0 | 0 | SparseDenseMatmulDotCombinerEmitter | 退休 |
6acc60406 | 5 | gxc.gfc | 无(无 gxc 驱动程序实现) | 0 | 0 | SparseDenseMatmulDotCombinerEmitter | 退休 |
Pufferfish 是高水位标记 - 一个完整的 BCS 音序器、四个 BarnaCore、一个专用的 HwMode 编码表和真正的驱动程序主体。 Viperfish 就是切入点——零编解码器、零 BarnaCore、kUnimplemented 驱动程序存根,以及重新定位到 SparseCore 的嵌入工作负载;在 gxc (Ghostlite/6acc60406) 上,甚至驱动程序存根都消失了。 v3+ 上“保留”的所有内容都是向后兼容 shell:Viperfish 驱动程序存根插槽、TpuSequencerType BarnaCoreSequencer = 1 / BarnaCoreAddressHandler = 2 枚举值(从未选择)、DMA_CORE_ID_BARNA_CORE_0..3 DMA 路由枚举(从未路由到)和 GetNumberOfBarnaCores() == 0告诉运行时那里什么都没有的访问器。
警告 - 不要将幸存的 ABI 误认为是实时引擎。 重新实现者或分析师在 Viperfish 驱动程序上看到
*BarnaCore*方法或 v3+ DMA 枚举中的BARNA_CORE值时,可能会得出结论,BarnaCore 在这些芯片上仍然处于活动状态。它不是。每个这样的表面都是退化的:Viperfish 方法返回kUnimplemented,DMA 核心 ID 路由为零 (GetNumberOfBarnaCores() == 0),并且不存在用于编码 BarnaCore 程序的编解码器。名称的存在并不代表引擎的存在。
置信度总结
| 索赔 | 证据 |
|---|---|
12 TpuCoreVxcDriverImpl::*BarnaCore* 方法是 kUnimplemented 存根; gxc 系列没有 | 反编译体0x1d118be0–0x1d118d40,全部MakeErrorImpl<12>("Not implemented in Viperfish.", …, tpu_core_vxc_driver_impl.cc),源代码行146–204;不存在 TpuCoreGxcDriverImpl 符号 |
同样的方法在jxc/pxc上有真正的寄存器编程体 | TpuCoreJxcDriverImpl::EnableBarnaCore @ 0xe735540 通过寄存器后端调度; pxc 同样 |
BC 编码器/编解码器/ISA 符号存在于 jxc/pxc·pfc 上,零存在于 vxc/gxc 上 | nm -C ∩ (Encoder/Codec/isa) ∩ BarnaCore 按系列命名空间存储:传统系列包含 BarnaCore 编解码器类,v3+ 系列不包含任何内容 |
Pufferfish 有 4 个 BarnaCore; Viperfish、gxc (Ghostlite/6acc60406) 和 plc 有 0 | pfc::…GetNumberOfBarnaCores() {return 4;} @ 0x1fbac480; vxc:: @ 0x1fbad0e0、gxc:: @ 0x1fda8b40、plc:: @ 0x1fbacb00 全部 {return 0;} |
Live Pufferfish BC 编码器为 EncoderBcsDf、EncoderPfBarnaCoreSequencer、EncoderPfBarnaCoreChannel | pxc.pfc 下的分解符号名称 |
InstBits_BarnaCorePxcHwMode是唯一的HwMode BC编码表; v3+ 没有 | TPUMCCodeEmitter::getBinaryCodeForInstr @ 0x13c74da0; v3+ 系列下没有 InstBits_BarnaCore*HwMode |
设备路径嵌入操作集是 ~20 操作 Enqueue*/Recv*/Send* 系列 | 枚举 18 个不同的 *(Enqueue|Recv|Send)TPUEmbedding*Op 符号 |
BarnaCore 查找发射器 = barna_core::BcsLloEmitter; v3+ 替换 = SparseDenseMatmulDotCombinerEmitter | 两个符号系列都存在; BcsLloEmitter::{IssueDmaInfeedToVmem,IssueDmaScatter} 与组合器 Emit* |
| 11 个 BarnaCore 时代优化器缩减为 5 个引擎上 SparseCore 优化器 | 11 不同的 (Load|Retrieve)TPUEmbedding<Opt>Parameters; 5 个不同的 XlaSparseDenseMatmulGradWith<Opt> |
| v3+嵌入降低永远不会到达BC发射器 | 从零 BC 编解码器 + GetNumberOfBarnaCores()==0 + SC 组合器推断为 v3+ 降低 |
交叉引用
- BarnaCore 概述 — 本页证明的传统嵌入加速器已退役;完整的每代存在矩阵。
- BCS Scalar0/Scalar1 ISA — BarnaCore 控制+内存 ISA,其编码器 (
EncoderPfBarnaCoreSequencer) 是此处统计的实时引擎证据。 - 合并 ALU 位布局 — 支持
InstBits_BarnaCorePxcHwMode表的 BarnaCore VLIW 捆绑布局。 - 每代 BarnaCore 性能网格 — 仅河豚
BarnaCorePFSchedModel调度表(无 v3+ 对应项)。 - SparseCore 概述 — 替换引擎,从 Viperfish 开始出现; SCS/TAC/TEC 三引擎分体式。
- SampleCombiner发射器 — SparseCore 嵌入组合器 (
SparseDenseMatmulDotCombinerEmitter) 将设备路径嵌入操作降低到 v3+,取代了 BarnaCoreBcsLloEmitter。 - 二进制:
extracted/libtpu-0.0.40-cp314-cp314-manylinux_2_31_x86_64/libtpu/libtpu.so(构建 ID89edbbe81c5b328a958fe628a9f2207d) - 索引条目: 第九部分 — SparseCore 和 BarnaCore / BarnaCore(旧版 v2–v4) — 返回索引