On-Pod 集体 — 剖面图
二进制:
extracted/libtpu-0.0.40-cp314-cp314-manylinux_2_31_x86_64/libtpu/libtpu.so(构建 ID89edbbe81c5b328a958fe628a9f2207d,构建libtpu_lts_20260413_b_RC00;.textVMA == 文件偏移0xe63c000)。 状态: 重新实现级图 · 证据等级: 已确认(字节锚定)、基质分割/端到端流程/操作系列调度,所有内容均根据 IDA 反编译进行交叉检查 · 第 XIII 部分 — On-Pod 集体和障碍 /集体算法 · 返回索引
摘要
此页面是从(未剥离的完整符号)libtpu.so 重建的 TPU 集体堆栈地图。 XLA/HLO 模块中的集合 — all-reduce、all-gather、reduce-scatter、all-to-all、collective-permute 及其异步/参差不齐的变体 — 被降低到物理环面上的 ICI(芯片间互连)环流量。编译器在两个不同的执行基础上执行此操作:直接驱动 ICI DMA 的密集 TensorCore 路径,以及将嵌入类集合作为单独的操作点传递给 SparseCore 的 SparseCore-offload 路径。本页记录了 (1) 基板分割和控制 SC 卸载的因素,(2) 从 HLO 集体运算到发射的 ICI 环调度的端到端流程,以及 (3) 集体运算系列及其每种成本/发射器调度。每个算法、路由/扭曲/屏障子系统和 SC 卸载配置构建器都是 同级页面 — 此页面链接它们;它不重复它们的字节级派生。
二进制中观察到的集体堆栈合约:
- 每个集合体都在物理环面(3 个维度 X/Y/Z)上进行缩减,而不是直接在逻辑副本列表上进行缩减:分区器和成本模型都查询拓扑(
ReplicaGroupsOnNDPlane、EstimatePhysicalLinksUsed)来得出集合体的副本组跨度有多少个环面维度。 - 策略选择是标志和形状驱动的,而不是成本比较。
BaseStrategyND::SelectNDStrategy@0x137c78e0从TpuCompEnv标志 + 环面范围中选择发射器系列(子平面/ND 环/N 路/扭曲环面/跨步);成本模型(CostModel::GetCollectiveCycles@0x130abfc0)仅产生调度程序的每个资源周期押金。真正的成本与成本比较是 SPMD 分区器的GetCommunicationTimeInMilliSec,用于选择分片,而不是发射器算法。 - ICI 带宽按方向建模(双向环): 共享术语为
eff_Bps = IciGigabytesPerSecond() · 0.5 · 1e9;在任何集体分支中没有附加延迟项 - 在 TensorCore 周期中,捆绑集体成本是纯带宽。 - SC 卸载由目标功能位 + 平台类型布尔 门控,具有每代硬件基础 (
TpuVersion == 5);当门成立时,嵌入集合作为每颜色 UNIDIR 环的CollectiveIciStrategyConfig原型发出,而不是作为 HLO ReplicaGroup 设备列表。
概览
| 方面 | TensorCore(致密)基底 | SparseCore卸载基板 |
|---|---|---|
| 发射器选择器 | BaseStrategyND::SelectNDStrategy @0x137c78e0 | ConstructConfigForCollectiveUniDirNDGroups<*> @0x133c82c0 / 0x133c2dc0 / 0x133cd800 |
| 选择输出 | 堆 StrategyND* 系列 → HLO ReplicaGroup 设备列表 | CollectiveIciStrategyConfig 原型(每色 UNIDIR 环) |
| 成本估算器 | CostModel::GetCollectiveCycles @0x130abfc0(TC 循环) | SC 环成本(通过 GetCollectiveOffloadConfig @0x133e1740 探头) |
| 异步跟踪器/调度器资源 | 水母TpuAsyncTracker {13..46} | 普通 SparseCoreAsyncTracker(基础 {0..12})→ 资源感知 {13..17} |
| 门 | 始终(密集 XLA 路径) | Megachip ∧ CoresPerChip(SC)>0 ∧ (Target[+0x628]&4 ∨ Target[+0x540]) ∧ ModuleContainsLEM… ∧ FLAGS_xla_sc_enable_latency_hiding_scheduler |
| Op型钥匙 | HLO 操作码 + SparseCoreConfig.offload 枚举 | SparseCoreConfig.offload(字段2,xla::jellyfish::Offload) |
1. 两个执行基板
该二进制文件通过两个并行的降低实现了 Pod 上的集合,这两个降低共享相同的物理环面,但在谁驱动 ICI DMA 以及如何构建调度方面有所不同。
1.1 TensorCore驱动的ICI集体(密集)
密集路径是默认路径。 XLA 集体操作保留在水母后端中,其中 BaseStrategyND::SelectNDStrategy 选择发射器策略,成本模型将 ICI 周期充电到 ResourceVector 中。策略对象(StrategyND 子类)生成按色环分解(HLO ReplicaGroup 设备列表的序列),集体发射器将其转换为 ICI DMA 描述符。 TensorCore 发出环传输;调度程序看到的成本是每个环面维度的 ICI 环成本。
在反编译中得到确认:SelectNDStrategy 构造 StrategySubgroupND、StrategyND(伞形 1D/ND 环类,也用于 N 路和跨步变体)和 TwistedTorusND,由 IsGroupNDPlane 门控, UseSpecialStrategyNDNWay、UseStridedStrategyND 以及通过 ReplicaGroupsOnNDPlane(…, plane=2, …) 进行的单 ND 平面测试。终端类别的详细信息参见**SelectND策略**。
1.2 SparseCore 卸载集合
嵌入类集合(由稀疏嵌入查找产生的梯度全归约/全聚集/归约分散)可以卸载到 SparseCore。 SC 路径不是发出 HLO ReplicaGroup 列表,而是构建一个 CollectiveIciStrategyConfig 原型 — 在相同 X/Y/Z 环面范围上的按颜色的 UNIDIR 环集 (ICI_RING_TYPE_UNIDIR_CW / _CCW) — 嵌入在 AllGatherOffloadConfig / AllReduceOffloadConfig / ReduceScatterOffloadConfig 内后端配置消息(0x48 的大小,字节相同的布局)。当成本模型看到卸载的集合时,它会探测 GetCollectiveOffloadConfig @0x133e1740 并对 SC 环操作点而不是密集 TC 环操作点进行充电。
该底层运行自己的延迟隐藏调度程序,具有两个顺序跟踪器:普通 SparseCoreAsyncTracker(虚函数表@0x2190da10) - 它没有目标定义的资源,仅限制基本 XLA 集体资源 {0..12},按操作码 + 自定义调用目标名称进行分类"AllToAllDynamic" — 后面是资源感知 SparseCoreResourceAwareAsyncTracker (vtable @0x2190e1b0),承载 {13..17} = {SCS, SCT, ICI, LocalReduction, 2DAllToAll} 资源上限 {1, 20, 5, 1, 1}。
SC 配置生成器是 TC StrategyND::BuildStrategy 的 SparseCore 模拟;它在 SC-卸载配置生成器 中有完整记录,其相分裂标志在 分层种类 中,其核心选择在 SC 核心选择(卸载) 中。
1.3 共享基底:物理环面网格分解
两种基板都减少了相同的物理环面并共享拓扑推导机制 - 这是保持密集和卸载成本/尺寸模型一致的粘合剂。集合体的副本组被映射到圆环上并简化为每维网格描述符:
ReplicaGroupsOnNDPlane@0x1c890960(在NDPlaneCacheKey → vector<MeshNDInfo>上记忆)通过TensorCoreLocationForLogicalDeviceId→TpuCoreLocation::Chip()(物理芯片坐标)将副本组分解到环面上,并报告组跨越的环面网格尺寸。 SPMD 分区器(链接计数除数,§3)和密集选择器(单 ND 平面测试,§4)都用plane = 2来调用它。EstimatePhysicalLinksUsed@0x1c8939c0遍历相同的芯片坐标来计算集体使用的物理 ICI 链路 - 全部/不规则/跨模块全部减少成本分支的除数。- 环面范围 X/Y/Z 由密集选择器、成本模型和 SC
GetDimensionRings@0x133df520以相同的芯片配置偏移量 ([chip_cfg+0x58]/+0x5c/+0x60) 读取 — 因此密集StrategyND环形调光器和 SCIciStrategyRingDim环形调光器具有相同的硬件几何形状。
每个维度的 ICI 资源映射也共享: GetResourceFromIciResource @0x1c894c00 将 IciResource ∈ [1..6] 映射到 ResourceVector 插槽 {0xd,0xe | 0xf,0x10 | 0x11,0x12} = 3 个圆环尺寸 (Y, X, Z) × 2 个环方向 (±)。降级轴重新映射将故障轴的两个插槽降级到主环之外(请参阅 降级轴摄取)。
2. 端到端流程
一项集体操作的降低(从 HLO 到发出的 ICI 流量)将经历以下阶段。第 2-4 阶段是密集 TC 路径; SC 卸载路径在第 2 阶段(门)分叉,并用第 1.2 节的配置构建器替换第 3-5 阶段。
HLO collective op (all-reduce / all-gather / reduce-scatter / all-to-all / collective-permute)
│
[1] classify opcode → IsNonFusionCollective; read SparseCoreConfig.offload (field 2)
│
[2] SUBSTRATE GATE
│ SC-offload? (Megachip ∧ CoresPerChip(SC)>0 ∧ (Target[+0x628]&4 ∨ Target[+0x540])
│ ∧ ModuleContainsLEMSparseCoreInstruction ∧ FLAGS_xla_sc_enable_lhs)
├── yes ─────────────► SC-OFFLOAD: ConstructConfigForCollectiveUniDirNDGroups<*>
│ → CollectiveIciStrategyConfig (per-color UNIDIR rings)
│ → SparseCore latency-hiding schedule
│
└── no (dense TensorCore path)
│
[3] STRATEGY SELECTION BaseStrategyND::SelectNDStrategy @0x137c78e0
│ entry fold: is_cross_module &= hlo->IsCrossReplicaAllReduce()
│ sub-plane? ND-plane? N-Way? twisted-torus? strided? → subgroup default
│ (degraded-axis remap folds in here via ComputeColorDimensions)
│
[4] ND-STRATEGY / TOPOLOGY
│ ReplicaGroupsOnNDPlane(plane=2) → mesh-dim count over physical torus
│ ComputeColorDimensions → [6][3] per-color ring-dimension table
│
[5] ROUTE-TABLE GENERATION (per-color RingLocation neighbor schedule)
│
[6] BARRIER / SYNC (replica/TensorCore barrier, SFLAG binding)
│
[7] ICI DMA EMISSION (per-torus-dimension ring DMA descriptors)
```text
成本模型 (`CostModel::GetCollectiveCycles` @`0x130abfc0`) 与阶段 3-7 正交运行:它消耗与阶段 4 导出的相同的拓扑维度计数,并将每个环面维度的周期估计存入调度程序的 `ResourceVector` 中。它**不**选择发射器算法。布线、扭曲几何结构和屏障是同级部分 - 请参阅 DMA 层的 **[路由](../routing/overview.md)**、**[扭曲环面](../twist/overview.md)**、**[屏障](../barrier/overview.md)** 和 **[ICI 面料](../ici/overview.md)**。
### 2.1 调度程序资源空间
阶段 6-7 由延迟隐藏调度程序控制,该调度程序的异步跟踪器将每个集合分类为资源槽并强制执行并发上限。存在三个跟踪器,安装在同一编译中的不同基板上:
| 跟踪器(vtable) | 基板 | `GetResourcesFromInstructionImpl` | 资源空间 | 分类器密钥 |
|------------------|-----------|-----------------------------------|----------------|----------------|
| 水母`TpuAsyncTracker` | TensorCore LHS | @`0x11001040`(自己+6个`MayAdd*`助手) | `{13..46}` | 操作码 + `SparseCoreConfig.offload` + Collective_id |
| `SparseCoreAsyncTracker` @`0x2190da10` | 普通 SC LHS | @`0x136122a0`(**基本**操作码→仅限 rt) | 基础 `{0..12}`(无目标资源) | 操作码 `{0xc, 0x10/0x11, 0x31}` + 自定义调用目标 `"AllToAllDynamic"` |
| `SparseCoreResourceAwareAsyncTracker` @`0x2190e1b0` | 成本模型SC LHS | @`0x134a7580`(自己的跳转表) | `{13..17}` = `{1, 20, 5, 1, 1}` | 操作码−3 跳转 → SCS / SCT / ICI / LocalReduction / 2DAllToAll |
当 SC 卸载门(§5)成立时,普通 `SparseCoreAsyncTracker` 首先运行(基本资源节流 + `FindNearestAllToAlls` 全部后处理),然后资源感知跟踪器使用 `{13..17}` 上限进行细化。普通跟踪器是令人惊讶的:它定义**没有**目标资源,并且仅覆盖 `IsSupportedAsyncStart`/`Done` (@`0x134964c0` / `0x13496520`) 和 `PostProcessScheduleGraph` — 其异步可调度集是操作码 all-to-all (`0xc`)、异步开始/完成 (`0x11`/`0x10`) 和自定义调用 (`0x31`),前提是目标名称映射到 `SparseCoreOperationType == 8` (`"AllToAllDynamic"`)。
---
## 3. 集体运算族
下面的HLO操作码整数通过`HloOpcodeString`表进行长度验证,并在`GetCollectiveCycles`跳转表中确认(反编译案例`6/8`、`9/11`、`12`、`34/36`、 `86`、`93`)。每个携带数据的操作码路由到每个种类的成本分支;异步 shell (`-start`/`-done`) 和 `collective-broadcast` 贡献 **零** ICI 捆绑成本 - 该成本根据数据承载操作码收取。
| 集体(操作码) | 成本分支 (`GetCollectiveCycles`) | 密集发射器/策略 | 每页 |
|---------------------|-------------------------------------|--------------------------|----------|
| `all-gather` (6)、`all-gather-start` (8) | AllGather 分支 @`0x130ac06c` (1D ÷2, 2D ÷4) | `StrategyND` ND 环 (`UseAllGather2D`) | [AllGather ND 环](allgather-nd-ring.md) |
| `all-reduce` (9), `all-reduce-start` (11) | AllReduce ND平面分支@`0x130ac14c` (÷`2·num_dims`) | 子平面/分层/钳形/二项式 | [分层/钳形](allreduce-hierarchical-pincer.md),[二项式/递归加倍](binomial-recursive-doubling.md) |
| `reduce-scatter` (93) | AllReduce 系列路径(RS 阶段,÷`2·num_dims`) | AR分解的RS阶段 | [ReduceScatter](reduce-scatter.md) |
| `all-to-all` (12) | `ComputeAllToAllCycles` @`0x130ae8e0` (÷`EstimatePhysicalLinksUsed`) | 全连杆饱和 | [AllToAll 表](alltoall-tables.md) |
| `ragged-all-to-all` (86) | `ComputeRaggedAllToAllCycles` @`0x130aea80`(分享A2A助手) | 衣衫褴褛的A2A | [AllToAll 表](alltoall-tables.md) |
| `collective-permute` (34), `-start` (36) | CollectivePermute分支@`0x130ac40f`(÷1,单链路) | 点对点 | (成本:[SPMD 链路计数成本](spmd-link-count-cost.md)) |
| `*-done` (7/10/35), `collective-broadcast` (33), `cp-done` | 默认@`0x130ae546` | — | 0 周期 |
关于成本形状的注释(完整的每类公式位于 [SPMD 链路计数成本](spmd-link-count-cost.md)):
- 全缩减ND平面分支在`num_dims = popcnt(active torus axes)`上对`B = 2 · operand_size`(缩减分散+全聚集阶段)进行充电,沉积到每个活动维度的两个ICI插槽中。
- 全部到全部/不规则全部到全部除以 `EstimatePhysicalLinksUsed` 和 `{1D→2.0, 2D→4.0}` 每链接表,使所有六个 ICI 插槽 `0xd..0x12` 饱和。
- Collective-permute是单点到点的情况(`÷1`,无`×2`双向因子);当每一对 `(src,dst)` 都乘坐相同的链接时,`AllPairsUseSameIciLink` 将存款范围缩小到一个 ICI 资源。
**确实**发生的成本与成本决策是在 SPMD 分区器中: `GetCommunicationMultiplier` @`0x127a16c0` 返回 `ReplicaGroupsOnNDPlane(plane=2).num_mesh_dims + 1` 作为链接计数除数(在反编译中确认:在 `plane=2` 查询之后的 `return (unsigned int)v7 + 1` ,其中`GetMultiSliceTopology`叉至片间率)。请参阅 [SPMD 链路计数成本](spmd-link-count-cost.md)。
---
## 4.策略选择(密集)
`BaseStrategyND::SelectNDStrategy` 是密集基板拾取器。它在 `enable_sub_plane` 参数上进行拆分,然后在拓扑和 `TpuCompEnv` 标志上进行拆分,生成五个终端策略类之一。该决策是**谓词和标志驱动的**;下表总结了分支顺序([SelectND策略](strategy-nd-picker.md) 中的完全推导、保护谓词、VLOG 名称和对象大小)。
| 订单 | 防护(摘要) | 策略已建立 | VLOG名称 |
|-------|-----------------|----------------|-----------|
| A | `enable_sub_plane ∧ all-reduce ∧ !cross_module ∧ env[0xe1f] ∧ single ND-plane` | `StrategySubgroupND` (0x638) | “启用ND子平面allreduce” |
| B | `!enable_sub_plane ∧ IsGroupNDPlane ∧ env[0x1015]` | `StrategyND` ND 环 (0x5f0) | “启用二维算法……” |
| C-i | `cross_module ∧ UseSpecialStrategyNDNWay`(单片,2-/4-路) | `StrategyND` N 路 | “启用策略NDNway” |
| C-ii | 单模块∧扭曲圆环形状(`2·a == dim`) | `TwistedTorusND` (0x610) | “AllReduceEmitter:选择扭曲拓扑” |
| C-iii | `UseStridedStrategyND`(单切片,NumNetDims==3,LDPC==1) | `StrategyND` 迈步 | “启用StridedStrategyND” |
| D | 其他 | `StrategyND` 默认ND环 | “启用策略子组ND。” |
然后,每个 `StrategyND` 通过 `[obj+0xa8]` 门解析 `BuildStrategy` @`0x137c4660` 中的 `UniDirection1DRingStrategy` 与 `UniDirectionNDRingStrategy`。每个颜色的环尺寸表来自 `ComputeColorDimensions` @`0x137c3ba0`,这是 **降级轴容错重新映射** 折叠的地方(故障环面轴降级到内环尺寸;有效尺寸计数下降 3→2) - 请参阅 [降级轴摄取](degraded-axis.md)。扭曲环面几何体有其自己的截面:[扭曲环面](../twist/overview.md)。
---
## 5. SC 卸载门 仅当以下保留的**全部**时才启用
SparseCore 卸载(在 `SparseCoreCompiler::RunHloScheduler` @`0x1306f820` 中确认字节精确;偏移量 `1576 = 0x628`、`1344 = 0x540` 与反编译的 `(*((_BYTE *)v6 + 1576) & 4) != 0 || *((_BYTE *)v6 + 1344)` 匹配):
```text
runSC = TpuChipConfig::Megachip(Target chip-config) @0x1306f84c
∧ CoresPerChip(kSparseCore) > 0 @0x1306f863
∧ ( Target[+0x628] & 4 ∨ Target[+0x540] ≠ 0 ) @0x1306f86c / @0x1306f87a
∧ ModuleContainsLEMSparseCoreInstruction(module) @0x1306fbc8
∧ FLAGS_xla_sc_enable_latency_hiding_scheduler @0x1306fc04两个Target字段写在jellyfish::Target::Init @0x1d60fc20中:
Target[+0x628] & 4— SC-offload-capability has-bit (|= 0x4@0x1d612121),或在由相同 SC-offload 功能检测谓词门控的配置附加循环内。这是真实的硬件路径。Target[+0x540]— 平台类型布尔值,设置(TpuTopology[+0] == 2)@0x1d610b1b(iss/模拟器平台),强制采用模拟器的 SC 路径。
每代硬件基础是 TpuVersion == 5(最新一代,在此版本中代号混淆为 "6acc60406"):ShouldEnableConcurrentSparseCoreOffloading @0x1d6b6f80 和 EnableSparseCoreOffloadQueuingInLhs @0x1d6b81e0 均为默认值(TpuChipParts[+0] == 5),可由 AutoOr<bool> 原型标志覆盖。内部 TpuVersion 枚举是 0 jellyfish, 1 dragonfish, 2 pufferfish, 3 viperfish, 4 ghostlite, 5 "6acc60406" (原始值 = 内部 + 1)。
5.1 Op型分类:SparseCoreConfig.offload
一旦选通,SparseCore 操作类型将从 SparseCoreConfig 字段 2 offload 读取,TYPE_ENUM 类型为 xla::jellyfish::Offload(结构偏移 +0x24,具有位 +0x10 掩码) 0x4)。它是一个后端配置枚举 - 不是自定义调用目标名称,不是 MLIR 操作类型。此枚举将操作路由到调度程序的 kSparseCore* 资源臂中:
Offload 值 | 枚举器 | 资源臂(调度程序,idx = enum − 2) |
|---|---|---|
| 0 | OFFLOAD_UNSPECIFIED | (无;rt22 ×N-cores 路径) |
| 1 | OFFLOAD_EMBEDDING | (无;rt22 ×N-cores 路径)— 仅预订地图 |
| 2 | OFFLOAD_GATHER | rt23 kSparseCoreGather |
| 3 | OFFLOAD_SCATTER | rt24 kSparseCoreScatter |
| 4 | OFFLOAD_COLLECTIVE | 异步体递归 |
| 5 | OFFLOAD_DATA_FORMATTING | rt25 kSparseCoreDataFormatting |
| 6 | OFFLOAD_KERNEL | rt26 kSparseCoreKernel |
| 7 | OFFLOAD_SORT | rt27 kSparseCoreSort |
| 8 | OFFLOAD_COMPUTE | (无;rt22 ×N-cores 路径) |
OFFLOAD_COLLECTIVE 案例 (4) 是达到第 1.2 节卸载 集体 配置构建器的案例。完整的枚举派生和预留映射孪生(GetSparseCoreResources,idx = enum − 1)位于 SC 核心选择(卸载) 和 SC-卸载配置生成器 中。
5.2 SC 基板发射什么
卸载配置构建器 (ConstructConfigForCollectiveUniDirNDGroups<*>) 生成 CollectiveIciStrategyConfig 原型嵌套而不是 HLO ReplicaGroup 列表。该巢的形状是 SC 基板对应于密集的 StrategyND 每色环表:
{AllGather|AllReduce|ReduceScatter}OffloadConfig (sizeof 0x48, byte-identical layout)
└─ ici_strategy_config : CollectiveIciStrategyConfig (field 2)
└─ color_strategies[] : PerColorIciStrategyConfig
└─ phase_rings[] : IciStrategyRingConfig (ring_type, ring_dim, core_count, …)
```text
环尺寸是通过 `IciStrategyRingDim` 枚举(8 个值)从与密集路径相同的 X/Y/Z 环面范围绘制的:`ICI_RING_DIM_{X,Y,Z}_{TORUS,MESH}` (1/2、3/4、5/6) 和 `ICI_RING_DIM_D2D` (7),其中 `0` 无效。 UNIDIR 环发出 `ICI_RING_TYPE_UNIDIR_CW` / `_CCW`。构建器是否为每个轴发出单个扁平环或多相分层分解由 **`HierarchicalKind`** 决定(`xla_tpu_enable_sparse_core_hierarchical_all_reduce` 的 `AutoOr<bool>` 包装;AllGather/ReduceScatter 固定为扁平,在此构建中只有 AllReduce 可以分层) - 请参阅 [分层种类](hierarchical-kind.md)。 SC 扭曲环面路径从密集路径使用的相同 K/2K 网格维度计数门中分支出来;参见 [扭曲环面](../twist/overview.md)。
---
## 6. 验证说明
> Substrate 分割、端到端流程、op-family 调度和 SC 卸载门均与 `libtpu.so` v0.0.40 的 IDA 反编译进行了交叉检查:
>
> - `CostModel::GetCollectiveCycles` @`0x130abfc0`:操作码跳转表情况 `6/8`(AllGather → `UseAllGather2D`)、`9/11/93`(AllReduce 系列 → `ComputeAllReduceCycles`)、`12` (`ComputeAllToAllCycles`)、`86`(`ComputeRaggedAllToAllCycles`)、`34/36`(集体置换); `TensorCoreFrequencyInMegaHertz`; `GetCollectiveOffloadConfig` SC 卸载探头 — 全部存在。
> - `GetCommunicationMultiplier` @`0x127a16c0`:`ReplicaGroupsOnNDPlane(…, 2, 0)` 然后 `return (unsigned int)v7 + 1`; `GetMultiSliceTopology`叉; `ConstructSliceTransferGroup(mode=3)` — 准确。
> - `BaseStrategyND::SelectNDStrategy` @`0x137c78e0`:`StrategySubgroupND`、`StrategyND`(NDNway/跨步)、`TwistedTorusND` 构造; `IsGroupNDPlane`、`UseSpecialStrategyNDNWay`、`UseStridedStrategyND` 防护罩; `ReplicaGroupsOnNDPlane(plane=2)`; VLOG 字符串 — 准确。
> - `SparseCoreCompiler::RunHloScheduler` @`0x1306f820`:`Megachip ∧ CoresPerChip(SC)>0 ∧ ((Target[+0x628]&4) ∨ Target[+0x540]) ∧ ModuleContainsLEMSparseCoreInstruction ∧ FLAGS_xla_sc_enable_latency_hiding_scheduler` — 准确(偏移量 0x628/0x540 已确认)。
>
> **[低]** 异步 shell 零成本集:操作码 `7/10/35` 和 `collective-broadcast` (33) 被分配给每个成本表推导的默认(0 周期)分支,但只有携带数据的操作码在此处的实时跳转表遍历中单独重新确认。 AllReduce/AllGather/AllToAll 分支的行为(对数据携带操作码收取的成本)是一致的。
---
## 交叉引用
### 密集 TensorCore 集体
- [SelectND策略](strategy-nd-picker.md) — ND 策略选择器(子平面/ND 环/N 路/扭曲/跨步/子组)
- [二项式/递归加倍](binomial-recursive-doubling.md) — 延迟受限的全缩减发射器
- [AllReduce 分层/钳形](allreduce-hierarchical-pincer.md) — 带宽限制全缩减发射器
- [AllGather ND 环](allgather-nd-ring.md) — 1D/2D 环全聚拢
- [ReduceScatter](reduce-scatter.md) — 全归约分解的归约分散阶段
- [AllToAll 表](alltoall-tables.md) — 全部到全部/不规则的全部到全部链接表
- [降级轴摄取](degraded-axis.md) — 容错轴重映射(3→2 维降级)
### 成本模型
- [SPMD 链路计数成本](spmd-link-count-cost.md) — `GetCommunicationMultiplier`,每种 `GetCollectiveCycles` 公式,ICI 资源槽
### SparseCore 卸载基板
- [SC-卸载配置生成器](sc-offload-config-builder.md) — `ConstructConfigForCollectiveUniDirNDGroups<*>` 和 `*OffloadConfig` 原型
- [分层种类](hierarchical-kind.md) — `AutoOr<bool>` 平面与分层相分离
- [SC 核心选择(卸载)](sc-core-selection-offload.md) — `SparseCoreConfig.offload` 运算类型分类和核心选择
### 同级子系统
- [路由](../routing/overview.md) — 路由表生成、环形路由缓存、单播发射
- [扭曲环面](../twist/overview.md) — 扭曲环面几何结构,2 相复制组结构
- [屏障](../barrier/overview.md) — 副本/TensorCore 屏障、SFLAG 绑定、树屏障垂直同步
- [ICI 面料](../ici/overview.md) — 芯片间互连 DMA 层
- [返回索引](../index.md)