Flag 家族
本页所有地址、符号和计数都适用于
libtpu-0.0.40-cp314wheel 中的libtpu.so(构建libtpu_lts_20260413_b_RC00,build-id md589edbbe81c5b328a958fe628a9f2207d,781,691,048 字节,ELF x86-64 DYN,未 strip)。其他版本会不同。
摘要
libtpu 注册了约 2048 个 absl::Flag<T> FLAGS_<name> 全局对象,并且每个 flag 名称都带有一个并非装饰性的前缀:前缀是路由键,它决定哪个 config structure 消费该 flag、哪个子系统拥有它,以及——对于带 codename 前缀的家族——该旋钮作用域属于哪一代 TPU。本页是 prefix → owner / routing map:约 18 个前缀命名空间的分类,说明每个属于什么子系统,前缀是否路由到 xla::DebugOptions、路由到 TpuCompilationEnvironment(TCE)、或路由到独立 runtime flag,并且关键地给出哪些家族是 TPU-live、哪些是 inherited-from-XLA-but-inert。
参考框架是 XLA 自己的 flag system。上游 XLA 在 CPU、GPU 和 TPU 后端之间共享一个 DebugOptions proto,flag 通过两个不同站点注册:MakeDebugOptionsFlags(mangled MakeDebugOptionsFlagsEPNS_,存在于二进制中)把通用 xla_* flag 接到 DebugOptions 字段上,而 TPU 构建加入了第二个大得多的表面——xla_tpu_* / codename 家族——它们落入 TPU 私有 TCE,完全不接触 DebugOptions。TPU 构建在共享 proto descriptor 中保留了 GPU/CPU 字段名,但注册了零个 xla_gpu_* / xla_cpu_* flag(字节级确认:零个 AbslFlagHelpGenForxla_gpu_* 符号)。枚举 DebugOptions 字段的重新实现者会看到约 275 个 xla_gpu_* 和约 64 个 xla_cpu_* 字符串,但背后没有 flag——这是 inert metadata,不是 live knobs。
本页是分类和路由图。它不重新列出逐 flag 目录——那是 flat atlas。它不负责 TpuVersion 感知的 prefix-strip/select 机制——那是 flag-prefix-dispatch.md。它不负责 proto 内部结构——那些是 debugoptions-proto.md 和 tpu-compilation-environment.md。它负责的是 prefix → owner 分类以及每个家族 live-vs-inert 的判定。
对重新实现来说,契约是:
- prefix → owner 路由表——对约 18 个前缀中的每一个,给出注册站点、它落入的 config struct(
DebugOptionsvs TCE vs standalone),以及消费它的子系统。 - codename 家族模型——
jf/pf/vf/gf是按TpuVersion划分的代际命名空间(Jellyfish / Pufferfish / Viperfish / 6acc60406),每个都携带作用域属于不同代际的同一组 VMEM/MSA knob 名称,并且目录中提到的glcodename 在此构建中不存在。 - live-vs-inert 分类——哪些家族拥有已注册的
AbslFlagHelpGenFor符号(live,可通过LIBTPU_INIT_ARGS设置),哪些仅作为 proto descriptor 字符串保留(在 TPU 上 inert)。
| 权威计数方法 | AbslFlagHelpGenFor<name> mangled symbols——每个已注册 absl::Flag 一个 |
xla_*(generic)注册站点 | MakeDebugOptionsFlags(MakeDebugOptionsFlagsEPNS_,176 个字符串引用)→ DebugOptions |
| TCE flag→field bridge | OverrideTpuCompEnvByCmdLineFlags @ 0x1d73e640 · SetFieldFromFlagString @ 0x1d73fcc0 · CreateDefaultTpuCompEnv @ 0x1d73dfa0 |
| DebugOptions baseline | DefaultDebugOptionsIgnoringFlags @ 0x1e66a860 |
| 已注册 flag 总数 | ~2048 个 FLAGS_<name> 全局;2107 个不同名称(含 rodata-only aliases) |
| Inert(零注册) | xla_gpu_*(0 flags / 275 strings),xla_cpu_*(0 flags / 64 strings) |
| 存在的 codename 家族 | jf 148,vf 16,gf 14,pf 1——gl 缺失 |
| 置信度 | 除非某行另有说明,否则为 CONFIRMED(在二进制中统计 registration symbols) |
1. 路由问题
目的
一个 flag 前缀一次回答三个问题;其中任何一个弄错,都会让重新实现者追逐一个不存在的字段,或交付一个悄悄 inert 的旋钮。这三个问题是:(1) 这个 flag 在 TPU 上是否真的注册? (2) 哪个 config struct 存储它的值? (3) 哪个子系统读取它? 本节建立路由框架;§2–§3 给出每个家族的答案。
三个 sink
每个已注册 flag 的值都恰好落在三个位置之一。前缀是判别器:
PREFIX SINK REGISTRATION SITE
────── ──── ─────────────────
xla_* (generic, non-tpu) → xla::DebugOptions field → MakeDebugOptionsFlags
(290-field DebugOptions) (MakeDebugOptionsFlagsEPNS_)
xla_tpu_* / xla_jf_* → TpuCompilationEnvironment → per-flag FLAGS_<name> ctor,
xla_sc_* / xla_msa_* field (1:1 flag↔field) bridged by
xla_gf_* / xla_vf_* / … OverrideTpuCompEnvByCmdLineFlags
barna_core_* + SetFieldFromFlagString
megascale_* / tpu_* / tf_* → standalone absl::Flag → per-flag FLAGS_<name> ctor;
(no proto; read directly) DCN runtime / driver / TF bridge
```text
第四种非 sink 情况是 **inert** 家族:名称存在于二进制的 `.rodata` 中(作为 `DebugOptions` proto field tag 或错误字符串),但没有 `FLAGS_<name>` 全局对象,也没有 `AbslFlagHelpGenFor` 符号。`xla_gpu_*` 和 `xla_cpu_*` 构成了这一类的全部。
> **陷阱 —** 前缀 `xla_` *不是*单一家族。名为 `xla_foo`(generic)的 flag 是 `DebugOptions` 字段,但 `xla_tpu_foo`、`xla_jf_foo`、`xla_sc_foo`、`xla_msa_foo`、`xla_gf_foo`、`xla_vf_foo`、`xla_hlo_foo`、`xla_llvm_foo`、`xla_mosaic_foo`、`xla_ior_foo`、`xla_llo_foo` 和 `xla_gpu_foo` 各自的路由都不同。只剥掉开头 `xla_` 并统一处理剩余部分的重新实现者,会把 1100+ 个 TCE flag 路由到错误的 proto。路由键是*第二个* token,而不是第一个。
### 计数方法——为什么这些数字是权威的
本页的逐家族计数**不是**原始字符串 grep(那些会因为相邻 `.rodata` 字面量产生 1–2 位数字拼接噪声后缀,例如 `xla_jf_accumulation_reassociation8`)。它们是 Itanium-mangled `_ZN<len>AbslFlagHelpGenFor<name>8NonConstEv` 符号的计数,每个已注册 `absl::Flag<T>` 都会发出一个这样的符号。在剥掉尾部数字噪声后,`AbslFlagHelpGenForxla_jf_*` 正好得到 148 个不同名称——与目录中的去重计数一致。同一方法给出每个前缀干净、注册真实的计数;一个前缀如果有**零**个此类符号,按构造它在此构建中就没有接入 flag。
---
## 2. 核心 XLA 家族(路由到 `DebugOptions` 且为 generic)
这些前缀继承自上游 XLA。有些在 TPU 上 live;有些只作为共享 proto metadata 保留。
### `xla_*` — generic XLA,`DebugOptions` proto
普通 `xla_*` 前缀(没有识别出的第二 token)是 generic XLA flag 家族:**112** 个不同已注册名称(去重后的 `AbslFlagHelpGenForxla_*`,与下面各自成行的 `tpu`/`jf`/`sc`/`gpu`/`cpu`/`msa`/`gf`/`vf`/`pf`/`ior`/`mosaic`/`llo`/`hlo`/`llvm` 第二 token 家族不重叠)。每个都按 1:1 名称映射到 `DebugOptions` 字段(`--xla_foo` ↔ field `xla_foo`),由 `MakeDebugOptionsFlags` 注册。在 libtpu descriptor 的 **290** 个 `DebugOptions` wire-fields 中,只有 **2** 个接到了已注册的 standalone `absl::Flag`(`xla_tpu_detect_nan` (135)、`xla_tpu_detect_inf` (136));其余——包括这些 generic `xla_*` 字段——是通过 PJRT `CompileOptions.debug_options` proto 路径到达的,而不是 standalone flag 表面(完整拆分见 [debugoptions-proto.md](debugoptions-proto.md))。全默认 baseline 是 `DefaultDebugOptionsIgnoringFlags @ 0x1e66a860`。此家族覆盖跨后端关注点:scheduler(`xla_latency_hiding_scheduler_*`)、MSA(`xla_enable_cross_program_prefetch`)、collectives(`xla_enable_async_all_reduce`)、dump/trace(`xla_enable_hlo_trace`),以及 `xla_backend_extra_options` string→string escape-hatch map。详细归属见 [debugoptions-proto.md](debugoptions-proto.md)。
### `xla_hlo_*` — HLO-level passes(拆分:live + proto-only)
`xla_hlo_*` 是一个*拆分*家族。5 个名称是 live registered flags(字节级确认的 `AbslFlagHelpGenForxla_hlo_*` 符号):`xla_hlo_scheduling_brkga_{computation_limit,generation_limit,enable_as_fallback,compute_runtime_estimates}`(BRKGA genetic-scheduler 调优子家族)和 `xla_hlo_parse_memory_schedule_from_file`。这些注册为 HLO scheduler 读取的 standalone `absl::Flag` 全局,而不是 TCE 字段。另外,`xla_hlo_print_inline_stack_frames` 作为 *proto-only* `DebugOptions` 字段存在(无 flag)——这是 TPU 后端未接线的 generic XLA dump plumbing。
> **注意 —** `xla_hlo_*` 是“前缀是否在 proto 中?”和“前缀是否是 flag?”彼此独立的最清楚例子。HLO scheduler knobs 是 live flags,但*不是* `DebugOptions` 字段;`xla_hlo_print_inline_stack_frames` 是 `DebugOptions` 字段,但*不是* flag。单靠前缀无法决定 sink。(CONFIRMED——5 个 registration symbols vs [debugoptions-proto.md](debugoptions-proto.md) 中列出的 proto-only 字段。)
### `xla_llvm_*` — LLVM-backend passes(拆分:live + proto-only)
`xla_llvm_*` 与 `xla_hlo_*` 类似。4 个名称是 live registered flags:`xla_llvm_isa_emitter`、`xla_llvm_isa_emitter_bundles`、`xla_llvm_isa_emitter_force`、`xla_llvm_generate_xla_compatible_dwg`——TPU 的 LLVM/LLO ISA-emission 路径。上游 generic 的 `xla_llvm_disable_expensive_passes` 仅作为 proto-only `DebugOptions` 字段保留(无 TPU flag)。因此 *live* 的 `xla_llvm_*` flags 是 TPU 专属 ISA emitter 控制,而不是名称暗示的 generic LLVM pass gate。
### `xla_gpu_*` 和 `xla_cpu_*` — inherited,INERT
这些是 inert 家族。二进制包含约 275 个 `xla_gpu_*` 和约 64 个 `xla_cpu_*` 字符串——但 **零个** `AbslFlagHelpGenForxla_gpu_*` 和 **零个** `AbslFlagHelpGenForxla_cpu_*` registration symbols。这些字符串是共享 `DebugOptions` proto descriptor 的 field tags(例如 `xla_gpu_command_buffer_scheduling_mode`、`xla_gpu_enable_split_k_autotuning`、`xla_cpu_enable_platform_dependent_math`),再加上 GPU/CPU 后端使用的 22 个 nested-enum 名称。在 TPU 上它们是无用负载:libtpu 填充的 `DebugOptions` 会以 proto 默认值携带这些字段,但没有 flag 可以设置它们,也没有 TPU consumer 读取它们。
| Family | Strings in binary | Registered flags | Verdict |
|---|---:|---:|---|
| `xla_gpu_*` | ~275 | **0** | INERT — 仅 `DebugOptions` 字段名 |
| `xla_cpu_*` | ~64 | **0** | INERT — 仅 `DebugOptions` 字段名 |
> **怪癖 —** TPU 构建在 descriptor pool 中携带了*整个* GPU/CPU `DebugOptions` 字段集,但剥掉了所有 GPU/CPU flag wiring。这是上游 XLA one-proto-for-all-backends 设计在 TPU-only 二进制中的残留。枚举 proto 的重新实现者会找到 17 个 proto-only 字段(在 [debugoptions-proto.md](debugoptions-proto.md) 中列举的 GPU/CPU/generic 子集);没有一个可从 `LIBTPU_INIT_ARGS` 到达。不要实现 `xla_gpu_*` 解析——没有任何东西可供它解析。(CONFIRMED——零 registration symbols。)
---
## 3. TPU 私有家族(路由到 TCE)
这些前缀是 TPU 专属的。每一个都是已注册 flag,其值通过 `OverrideTpuCompEnvByCmdLineFlags @ 0x1d73e640` bridge 1:1 落入 `TpuCompilationEnvironment` 字段。它们都不是 `DebugOptions` 字段。
### `xla_tpu_*` — 主 TPU 表面
占主导地位的家族:**909 个已注册 flags**(`AbslFlagHelpGenForxla_tpu_*` 符号;目录中的 968-distinct union 额外计入 rodata-only aliases 和只出现在错误消息中的引用)。每个 `xla_tpu_*` flag 都按名称成为 TCE 字段。该家族横跨整个 TPU compiler 和 runtime:scheduler(LHS/ILP/BRKGA/Dozer/LEM)、MSA(scoped VMEM/CMEM、prefetch)、fusion(rwb/dot-dot/nested-dot/MRB)、ICI collectives、numerics、layout、dot/conv、autotune/AutoFDO,以及 debug/dump。每组的 subsystem keyword taxonomy 和代表性 flags 见 [xla-flag-atlas.md](xla-flag-atlas.md)。这些 flag 背后的 TCE 字段中约 330 个是 `AutoProto` tri-state knobs(通过 `AutoOr<T>` 解析),详见 [overview.md](overview.md) §4。
### Codename 家族 — `jf` / `pf` / `vf` / `gf`(按 `TpuVersion`)
最有特色的路由事实是:四个前缀是 **TPU 代际 codename**,每个携带一组*并行* knob 名称,作用域属于某个 `TpuVersion`。这些 codename 在二进制中确认为 `JELLYFISH`、`PUFFERFISH`、`VIPERFISH`、`DRAGONFISH` token。
| Prefix | Codename | Registered | Role |
|---|---|---:|---|
| `xla_jf_*` | Jellyfish | 148 | TPU XLA backend 命名空间(compiler core,所有代际) |
| `xla_vf_*` | Viperfish | 16 | 按代际的 VMEM / MSA overrides |
| `xla_gf_*` | (6acc60406 / v7x TPU7x, `gxc::gfc`) | 14 | 按代际的 VMEM / MSA overrides |
| `xla_pf_*` | Pufferfish | 1 | `xla_pf_enable_nd_allreduce`(ND all-reduce gate) |
`vf` / `gf` 家族几乎逐名称相同——它们是按代际复制的*同一组* memory-subsystem knobs。比较这些字节级确认名称:
```text
xla_gf_max_vmem_used_by_memory_space_assignment ┐
xla_vf_max_vmem_used_by_memory_space_assignment ├─ same knob, different gen
│
xla_gf_vmem_default_cross_program_prefetch_heuristic ┐
xla_vf_vmem_default_cross_program_prefetch_heuristic ├─ same knob, different gen
│
xla_gf_vmem_enable_cross_program_prefetch ┐
xla_vf_vmem_enable_cross_program_prefetch ┘
xla_vf_allow_split_vmem · xla_vf_allow_replicated_vmem_writes (vf-only)这是 TpuVersion 感知 overlay 的静态表面:per-codename MSA overlay(baseline ⊕ family-overlay,v0/1→jf,v2→cmem,v3→vf,v4/5→gf)会按代际改写一组 TCE 字段。解析编译时应用哪个 codename 家族的 prefix-strip/version-select 分派由 flag-prefix-dispatch.md 负责。
注意 —
xla_gf_*(14)不是唯一的 per-gen VMEM 家族。Registration-symbol 计数显示还共存一个 16-flag 的xla_vf_*家族(Viperfish)和一个 1-flag 的xla_pf_*(Pufferfish),二者都携带相同的 VMEM/MSA knob 名称(存在AbslFlagHelpGenForxla_{vf,pf}_*符号)。这三个都是真实的、字节级确认的 codename 家族。陷阱 — 此构建中不存在
glcodename 家族——零个xla_gl_*字符串,零个AbslFlagHelpGenForxla_gl_*符号。重新实现者不得为它保留路由分支。live codename set 是{jf, pf, vf, gf}。
xla_sc_* 和 barna_core_* — SparseCore / embedding
xla_sc_*(92 个已注册)是 SparseCore LLVM-backend compiler 家族:instruction fusion、latency-hiding scheduler、tile/SCS overlays、stack eliding、HBM optimization,以及 xla_sc_dump_* debug 表面。barna_core_*(61 个已注册)是 BarnaCore embedding-engine runtime 家族——HBM fraction budgets、row-sharding limits、partitioner objectives、profiler intervals。二者都路由到 TCE。注意 barna_core_* 完全没有 xla_ 前缀,但仍路由到 TCE:路由键是已识别的 family token,而不是开头的 xla_。xla_sc_* codegen 关系从 tpu-compilation-environment.md 交叉引用。
xla_msa_*、xla_gf_*、xla_ior_*、xla_mosaic_*、xla_llo_* — 窄 TCE 命名空间
| Prefix | Registered | Owner / role | Sink |
|---|---|---|---|
xla_msa_* | 22 | Memory-Space-Assignment(专用命名空间:prefetch ratios、eviction/repack caps、IOR algorithm) | TCE |
xla_gf_* | 14 | 6acc60406/v7x VMEM/MSA overrides(codename,见 §3) | TCE |
xla_vf_* | 16 | Viperfish VMEM/MSA overrides(codename,见 §3) | TCE |
xla_ior_* | 4 | "IOR" fast-mem round-trip MSA variant | TCE |
xla_mosaic_* | 8 | Mosaic MLIR custom-kernel dialect controls | TCE |
xla_llo_* | 1 | xla_llo_annotation_lifecycle_strict_mode(LLO annotation lifecycle) | TCE |
xla_msa_* 是专用 MSA 命名空间,它补充了 xla_tpu_* MSA flags 和 per-gen xla_{gf,vf}_vmem_* overrides;这三层(xla_msa_* policy、xla_tpu_* scoped limits、per-gen overlay)在 consumer 处组合。
4. Runtime / Standalone 家族(无 proto)
这些家族注册为 runtime 直接读取的普通 absl::Flag 全局——它们既不落入 DebugOptions,也不落入 TCE。
megascale_* — DCN collective runtime
150 个已注册 flags。Megascale data-center-network collective runtime:slice topology(megascale_num_slices、megascale_slice_id、megascale_coordinator_address)、transport(megascale_transport_type、megascale_grpc_num_channels、megascale_use_mtls_for_grpc)、watchdog/heartbeat(megascale_enable_watchdog、megascale_heartbeat_{interval,timeout}_ms),以及 abort policy(megascale_error_reporter_abort_on_{error,hang})。这些由 DCN runtime 在执行时读取,而不是由 compiler 读取;它们是没有 proto backing 的 standalone flags。
tpu_* — runtime / cache / driver
69 个已注册 flags。TPU runtime、compilation-cache 和 driver 表面:persistent compilation cache(tpu_persistent_compilation_cache_location、tpu_program_cache_eviction_policy)、driver lifecycle(tpu_deferred_deallocation、tpu_driver_callback_watchdog_timeout、tpu_link_up_check_timeout)、telemetry/coredump(tpu_core_dump_directory、tpu_hbm_report_enable),以及危险的 DANGEROUS_tpu_runtime_abi_verification_disabled。这些是与 compile-time 无关的 runtime knobs。
怪癖 — 尽管共享
tpu子串,tpu_*(runtime)和xla_tpu_*(compiler)是不同家族。xla_tpu_foo→ TCE compiler field;tpu_foo→ standalone runtime flag。小写libtpu_*标识符(libtpu_init_utils、libtpu_lockfile、libtpu_version、libtpu_lts_20260413_b_build tag)根本不是 flags——它们是 module / translation-unit 名称,并且不存在AbslFlagHelpGenForlibtpu_*符号。(CONFIRMED。)
tf_* — TensorFlow-TPU bridge
20 个已注册 flags(例如 FLAGS_tf_jf_*)。旧版 TensorFlow-TPU bridge 表面,由 TF integration layer 读取的 standalone flags。
5. 完整路由图
完整的 prefix → owner / routing / live-vs-inert 表。计数是 registration-symbol-true(AbslFlagHelpGenFor<prefix>);INERT 行显示 string-count / zero-flags。
| Prefix | Registered | Subsystem owner | Sink | Live? |
|---|---|---|---|---|
xla_tpu_* | 909 | TPU compiler + runtime(主表面) | TCE | LIVE |
megascale_* | 150 | Megascale DCN collective runtime | standalone | LIVE |
xla_jf_* | 148 | Jellyfish — TPU XLA backend core | TCE | LIVE |
xla_*(generic) | 112 | Generic XLA(scheduler/MSA/collective/dump) | DebugOptions | LIVE(290-field schema) |
xla_sc_* | 92 | SparseCore LLVM compiler backend | TCE | LIVE |
tpu_* | 69 | TPU runtime / cache / driver | standalone | LIVE |
barna_core_* | 61 | BarnaCore embedding-engine runtime | TCE | LIVE |
xla_msa_* | 22 | Memory-Space-Assignment namespace | TCE | LIVE |
tf_* | 20 | TensorFlow-TPU bridge | standalone | LIVE |
xla_vf_* | 16 | Viperfish per-gen VMEM/MSA | TCE | LIVE |
xla_gf_* | 14 | 6acc60406/v7x per-gen VMEM/MSA | TCE | LIVE |
xla_mosaic_* | 8 | Mosaic MLIR custom-kernel dialect | TCE | LIVE |
xla_hlo_* | 5 | HLO scheduler(BRKGA)+ schedule I/O | standalone* | LIVE(split) |
xla_ior_* | 4 | IOR fast-mem round-trip MSA variant | TCE | LIVE |
xla_llvm_* | 4 | LLVM/LLO ISA emitter controls | TCE/standalone | LIVE(split) |
xla_pf_* | 1 | Pufferfish ND all-reduce | TCE | LIVE |
xla_llo_* | 1 | LLO annotation lifecycle | TCE | LIVE |
xla_gpu_* | 0(~275 str) | (GPU backend — 不在 TPU 上) | DebugOptions proto-only | INERT |
xla_cpu_* | 0(~64 str) | (CPU backend — 不在 TPU 上) | DebugOptions proto-only | INERT |
xla_gl_* | 0(0 str) | — | — | ABSENT |
* xla_hlo_* / xla_llvm_* 是拆分家族:有一个 registered-flag 子集(standalone 或 TCE)以及一个 proto-only DebugOptions 子集(见 §2)。"Sink" 单元格命名的是 live 子集的 sink。
注意 — 目录中的
(other / no std prefix)412-name bucket(静态链接进 libtpu 的 abseil / grpc / protobuf / OR-tools / cp_model 库 flags)有意从此图中省略——那些不是 XLA/TPU flags,并且通过各自库的注册路由,而不是 TPU config pipeline。它们只能附带地像任何 absl flag 一样通过LIBTPU_INIT_ARGS设置。
在路由站点阅读此图
flag dispatcher 的重新实现会把 --name[=value] 参数 token 化,并按第一个已识别前缀 token 路由:
function RouteFlag(name): // models the dispatch implied by the
tok = SecondToken(name) // registration-site split (§1)
if name starts "megascale_" or "tpu_"
or name starts "tf_" or "barna_core_":
return STANDALONE // FLAGS_<name>, read by runtime
if name starts "xla_":
switch tok:
case "tpu","jf","sc","msa","gf","vf", // codename + TPU namespaces
"pf","ior","mosaic","llo":
return TCE // OverrideTpuCompEnvByCmdLineFlags
case "gpu","cpu":
return INERT // proto field only, no flag — reject
case "hlo","llvm":
return SPLIT // some flags standalone/TCE, some proto-only
default: // plain xla_<concern>
return DEBUG_OPTIONS // MakeDebugOptionsFlags field
return STANDALONE // library flag (abseil/grpc/…)
```text
这是逻辑形状,而不是单个已追踪函数:实际绑定由 `absl::ParseCommandLine` 根据预建的 `FLAGS_<name>` registry 泛型完成,proto 路由发生在 parse 之后(`DebugOptions` 字段通过 proto 自己的 flag wiring,TCE 字段通过 `OverrideTpuCompEnvByCmdLineFlags`)。上面的图决定了哪个 `FLAGS_<name>` 存在,以及什么会消费它。(路由分类为 HIGH confidence;dispatcher 是从 registration-site split 重构的,而不是单个字节追踪到的 switch。)
---
## 相关组件
| Component | Relationship |
|---|---|
| `MakeDebugOptionsFlags`(`…EPNS_`) | 将 generic `xla_*` flags 注册到 `DebugOptions` 上 |
| `OverrideTpuCompEnvByCmdLineFlags @ 0x1d73e640` | 将 TCE-routed 家族(`xla_tpu_*`、codenames、`xla_sc_*`、…)桥接进 TCE |
| `SetFieldFromFlagString @ 0x1d73fcc0` | TCE bridge 使用的逐字段 writer |
| `DefaultDebugOptionsIgnoringFlags @ 0x1e66a860` | `xla_*` 家族的全默认 baseline |
| `AbslFlagHelpGenFor<name>` symbols | 权威的逐家族 registration enumeration |
## 交叉引用
- [overview.md](overview.md) — 三层 pipeline;此图所在的位置(每个家族落入哪个 proto)
- [xla-flag-atlas.md](xla-flag-atlas.md) — 扁平逐 flag 目录;本页按前缀索引的完整名称列表和 subsystem keyword taxonomy
- [flag-prefix-dispatch.md](flag-prefix-dispatch.md) — `TpuVersion` 感知的 prefix-strip/select 机制,以及 per-codename MSA overlay(`jf`/`vf`/`gf` resolution)
- [debugoptions-proto.md](debugoptions-proto.md) — `xla::DebugOptions`:290-field schema,以及 inert 的 `xla_gpu_*`/`xla_cpu_*` carryover fields(只有 2 个字段接了 standalone flag;早先的 "94/111" 拆分已在那里被取代)
- [tpu-compilation-environment.md](tpu-compilation-environment.md) — `xla_tpu_*` / codename / `xla_sc_*` / `xla_msa_*` 家族落入的 TCE master proto
- [registry-mediated-flags.md](registry-mediated-flags.md) — reflection-mediated flag→field bridge(`TpuCompEnvReflection`),通过一条泛型路径服务所有 TCE 家族