TCE 字段偏移与标志默认值
本页所有地址均适用于
libtpu-0.0.40-cp314wheel 中的libtpu.so(build-id md589edbbe81c5b328a958fe628a9f2207d,内部标签libtpu_lts_20260413_b_RC00)。该 ELF 未 stripped;下方符号名均逐字取自.symtab。其他 libtpu 构建会有所不同。
摘要
TpuCompilationEnvironment(TCE)是 TPU 私有的主配置 proto,共有 1121 个存活字段,每个字段都注册为一个 absl::Flag。字段字典为每个字段命名并确定类型之后,还剩两个问题:每个旋钮在实体化后的 C++ 对象中实际位于哪里,以及在任何 flag、AUTO 分支或按 codename 的 overlay 触碰它之前,它被种成什么字面值。本页负责这两个答案:field# → struct-byte-offset 映射和 field# → flag-default-value 映射,并给出把解析后的值写入对象的写入路径函数。
偏移 oracle 不是手工反汇编出来的 accessor 列表。它是 protobuf fast-parse table TpuCompilationEnvironment::_table_(一个 TcParseTableBase),其中 1121 项 FieldEntry 数组携带每个字段的精确 struct 偏移,并按字段号升序排序。默认值 oracle 是每个 FLAGS_<name> 对象内部 FlagImpl+0x48 处的 union:要么是一个指向 AbslFlagDefaultGenFor<name>::Gen 函数体(其中 mov 一个 immediate)的 relocation,要么在没有 reloc 时,是八个内联字面量字节。507 个字段使用 Gen 函数;614 个使用内联字面量。实体化驱动 CreateDefaultTpuCompEnv @0x1d73dfa0 遍历 descriptor,并对每个字段运行一次 GetFlagForField → ReadFlag → SetEnvField;两个外科式 writer,SetFieldFromFlagString @0x1d73fcc0 和 OverwriteFieldIfNotDefault @0x1d73f360,随后覆盖单个字段。
读者应把本页视为桥接层。schema(名称、类型、wrapper enum、HOT 标签)在字典页;message/oneof 字段的 AUTO-arm 解析在 AutoProto / AutoOr Resolution;对象结构总览在 TpuCompilationEnvironment。这里把 field# 连接到偏移和默认值,并追踪 flag 写入路径。
对于重新实现,契约是:
- 偏移公式 — 如何从
TcParseTableBase头部常量和FieldEntry数组,确定性地计算任意 1121 个字段的struct_offset(field N)。 - 默认值机制 —
FlagImpl+0x48union、kGenFunc-vs-kOneWord 判别器(是否存在 reloc),以及如何解码每种基础类型的 immediate。 - 种子驱动和两个覆盖器 —
CreateDefaultTpuCompEnv的逐字段循环,以及带有“both set”冲突规则的SetFieldFromFlagString/OverwriteFieldIfNotDefault单字段写入路径。 - 默认值统计 — 哪些值是非平凡的(120 MiB combiner 阈值、INT64_MAX fuel 旋钮、MSA overlap-ratio 三元组、7 个 wrapper-enum 默认值),以便重新实现者能复现字节一致的默认 env。
| 偏移 oracle | TpuCompilationEnvironment::_table_ @0x21cfa9e0 (.data.rel.ro) |
FieldEntry 数组 | table +0x370,1121 × 12 B,field# 升序 |
sizeof(TpuCompilationEnvironment) | 0x15e8 (5608 B);字段数据 +0xa8..+0x15e0 |
| 默认值 union | 每个 FLAGS_<name> 的 FlagImpl+0x48(reloc ⇒ gen body,无 ⇒ inline) |
| 默认值拆分 | 507 kGenFunc / 614 kOneWord(共 1121,field↔flag 完美 1:1) |
| 种子驱动 | CreateDefaultTpuCompEnv @0x1d73dfa0 |
| 单字段 writer | SetFieldFromFlagString @0x1d73fcc0,OverwriteFieldIfNotDefault @0x1d73f360 |
| 默认 singleton | GetTpuCompEnvWithDefaultValues @0x1d73f100(NoDestructor,lazy) |
Field# → Offset:Parse-Table Oracle
目的
序列化或内存中的 TpuCompilationEnvironment 是一个扁平的 5608 字节 C++ 对象。想读取某个具体旋钮的消费者,例如 post-optimization pipeline 字符串或 pipelined-loop-unroll Tristate,需要该字段在对象内部的字节偏移。生成的 protobuf fast-parse table 已经编码了每个偏移;本节从该表恢复偏移,而不是从逐字段 accessor 的反汇编中恢复,因此能覆盖全部 1121 个字段,而不只是少数带手写 gate 的字段。
TcParseTableBase 头部
TpuCompilationEnvironment::_table_ @0x21cfa9e0 以标准 protobuf TcParseTableBase 头部开始。逐字节解码如下:
TcParseTableBase @0x21cfa9e0
+0x00 uint32 has_bits_offset = 16 (0x10) hasbits start at struct +0x10
+0x02 uint16 extension_offset = 0 no extensions
+0x04 uint32 max_field_number = 1218 (0x4c2) matches the descriptor max
+0x08 uint32 fast_idx_mask = 0xf8
+0x10 uint32 field_entries_offset = 0x370 FieldEntry array start
+0x14 uint16 num_field_entries = 1121
+0x16 uint16 num_aux_entries = 349 = the 349 message-typed fields
+0x18 uint32 aux_offset = 0x3800
```text
`max_field_number` 是 **1218**,但 `num_field_entries` 是 **1121**:差值是 97 个已声明但保留的字段号。`FieldEntry` 数组对每个*存活*字段保存一项,因此即使最高字段号是 1218,它也在 1121 项上是密集的。
### `FieldEntry` 布局和偏移公式
每个 `FieldEntry` 为 12 字节:
```text
FieldEntry (12 bytes, array @ table+0x370, 1121 entries)
+0x00 uint32 offset struct byte-offset of this field's storage
+0x04 uint32 has_idx presence-bit index (into the hasbit words at struct +0x10)
+0x08 uint16 aux_idx index into the aux array (message/enum types only)
+0x0a uint16 type_card 16-bit protobuf type card (see below)该数组按字段号升序排序,因此 FieldEntry[i] 是第 i 个存活字段。字段号 N 的偏移因此为:
// Deterministic offset lookup — no disassembly needed per field.
uint32 struct_offset(int N):
i = index_of(N) // = (N-1) - (count of reserved field#s below N)
return FieldEntry[i].offset // table+0x370 + 12*i, read uint32 at +0x00
```text
三个此前通过手工反汇编 consumer gate 钉住的偏移,可由该表**精确**复现,从而验证公式:
| Field# | 名称 | 索引 | 偏移 | 交叉检查来源 |
|---|---|---|---|---|
| #132 | `xla_tpu_verify_or_assign_tiling_before_lowering` | 120 | `+0xDFC` | 手工钉住的 accessor gate |
| #648 | `xla_while_loop_unroll_count` (int64) | 591 | `+0x1328` | parse-table FieldEntry[591] |
| #867 | `xla_tpu_enable_pipelined_loop_unrolling` (message) | 787 | `+0x2f0` | parse-table FieldEntry[787] |
> **注意 —** 字段 **#2**(`xla_tpu_sdc_checker_instrument_megacore_fusion`,bool)在 parse table 中位于 `+0xBC`,而不是 `+0x1206` 区域。`+0x1206`(4614)是*另一个*字段,即 producer-priority cost model 读取的 collective-producer "must-fuse" bool。`FieldEntry` 数组把每个字段解析到精确字节偏移。
### `type_card` 交叉检查
每个 `FieldEntry` 中的 16 位 `type_card` 是字段 proto 类型的 1:1 代理:每个基础类型都精确映射到一张 card,且逐 card 的数量与字典的类型直方图完全一致,没有任何分歧。这独立确认了偏移表和[字段字典](tce-field-dictionary-a.md)以相同顺序描述同一组 1121 个字段。
| 类型 | `type_card` | 数量 | 类型 | `type_card` | 数量 |
|---|---|---|---|---|---|
| bool | `0x0011` | 418 | string | `0x0c15` | 37 |
| int64 | `0x10d1` | 148 | float | `0x1893` | 34 |
| message | `0x0416` | 349 | int32 | `0x1091` | 32 |
| enum | `0x1891` | 74 | double | `0x18d3` | 14 |
| | | | uint32 | `0x0891` | 11 |
| | | | uint64 | `0x08d1` | 4 |
> **注意 —** 每个 `FieldEntry` 中的 `has_idx` 已恢复,但 `has_idx` →(hasbit word 偏移、bit 位置)的打包尚未**重新走查**。它遵循 protobuf 从 `has_bits_offset=16` 开始的标准顺序打包;hasbit 区域在 struct `+0x10`..`~+0xb0` 之间覆盖约 1121 个 presence bit。重新实现者若要从序列化 env 读取字段 presence,必须推导该打包(一次 `TpuCompilationEnvironment::Clear` 的反汇编确认了这一点)。标记为 LOW,直到走查完成。
---
## Field# → Default:`FlagImpl+0x48` Union
### 目的
每个 TCE 字段都是名为 `FLAGS_<field_name>` 的 `absl::Flag` 的类型化镜像。字段默认值,也就是在任何命令行 flag 或按 codename 的 overlay 应用前,实体化 env 携带的值,就是该 flag 注册的默认值。本节定位该默认值在 `FlagImpl` 对象内部的位置,并给出每种基础类型的解码规则。
### `FlagImpl` 布局
每个 `FLAGS_<name>` 是一个 0x60 字节的 `absl::FlagImpl`:
```text
FlagImpl (0x60 bytes)
+0x00 vtable (0x22040f18)
+0x08 name (const char*)
+0x10 type_name (const char*)
+0x18 filename (const char*)
+0x20 FlagOps<T> (op dispatch)
+0x28 HelpGen
+0x30 packed metadata
+0x38 lazy sentinel (-1)
+0x40 default-kind discriminator
+0x48 DEFAULT-VALUE UNION ← the literal lives here判别器隐含在 relocation table 中,而不只是 +0x40 字节:
kGenFunc— 如果一个R_X86_64_RELATIVEreloc 指向+0x48,该 union 保存一个指向AbslFlagDefaultGenFor<name>::Gen的函数指针。该函数体用一个mov imm把默认值写入调用者缓冲区。507 个字段。kOneWord— 如果没有 reloc 指向+0x48,这八个字节就是字面值。614 个字段。
Gen 函数体解码
Gen 函数体是最小可能函数:存一个 immediate,然后返回。四个逐字节确认的示例(反编译函数体,精确地址):
AbslFlagDefaultGenForxla_tpu_register_selection_policy::Gen: // 0x1d723540
*(uint8*)dst = 6; // RegSelectPolicy DISREGARD_RECENTLY_USED
AbslFlagDefaultGenForxla_msa_enable::Gen: // 0x1d705500
*(uint8*)dst = 2; // Tristate ENABLED
AbslFlagDefaultGenForxla_tpu_msa_inefficient_use_to_copy_ratio::Gen: // 0x1d721c60
*(uint32*)dst = 0x3F000000; // 1056964608 == 0.5f
AbslFlagDefaultGenForrematerialization_algorithm::Gen: // 0x1d718ee0
*(uint64*)dst = 0x7464697765657274; // "treewidt"
*(uint64*)(dst+8) = 104; // 'h' + SSO terminator → "treewidth"
*(uint64*)(dst+16)= 0x0900000000000000; // std::string SSO length byte (9)
```text
指令骨架直接说明类型:
| 模式 | 类型 | 示例 |
|---|---|---|
| `c6 07 imm8 c3` (`movb`) | bool / 1-byte enum | `register_selection_policy = 6` |
| `c7 07 imm32 c3` (`movl`) | float / int32 / uint32 / 4-byte enum | ratio `0x3F000000 = 0.5f` |
| `48 c7 07 …` / `48 b8 …` (`movabs`) | int64 / uint64 / double | `vliw_fuel = 0x7fffffffffffffff` |
| `c5 f8 57 c0 …` / movabs-SSO | string(SSO / empty) | `"treewidth"` |
| `66 c7 07 0000 c3` / `vxorps` | 空 AutoProto / message | oneof-case 0 = AUTO |
对于 `kOneWord` 字段,直接读取 `+0x48` 处的八个字节。例如,`xla_tpu_arf_combiner_threshold_in_bytes` 携带内联 `0x0000000007800000`(= 125,829,120 = 120 MiB),`xla_jf_loop_trip_count` 携带内联 `4`。
### 默认值统计
1121 个默认值按基础类型拆分如下。该统计是重新实现者的检查清单:复现这些分布和具名的非平凡值,默认 env 就是字节一致的。
| 类型 | 数量 | 默认值分布 |
|---|---|---|
| bool | 418 | 153 **true**,265 **false** |
| enum | 74 | 67 Tristate(21 ENABLED,37 AUTO,9 DISABLED)+ 7 个 wrapper enum |
| int64 | 148 | 108 个非 {0,−1};combiner thresholds、BRKGA limits、INT64_MAX fuel knobs |
| int32 | 32 | 18 个非 {0,−1};trip counts、send/recv limits |
| float | 34 | MSA overlap ratios、megacore margins、oblongness 50.0 |
| double | 14 | MSA scaling factors |
| string | 37 | 30 个空 `""`,7 个非空字面量 |
| message | 349 | **全部**为空/AUTO instance(oneof-case 0) |
| uint32 | 11 | — |
| uint64 | 4 | — |
> **陷阱 —** 注册的 absl flag 默认值是字段默认值的**字节权威**来源。Help-string 文本*不是*。对于 `xla_tpu_rwb_fusion` 和 `xla_tpu_accumulate_into_mrb`,`=value` help-string 文本为 `false`,但它们的 `FlagImpl+0x48` 内联字面量都是 `01 00 00 00` = **true**。help string 描述行为,而不是种入的默认值。两者不一致时,信任 `+0x48` 处的 union。
---
## 写入路径
### `CreateDefaultTpuCompEnv` — 逐字段种子循环
`CreateDefaultTpuCompEnv` @`0x1d73dfa0` 是实体化全新默认 env 的驱动。它*不是*一个静态 initializer list;它遍历 descriptor,并在运行时读取每个字段的 flag 默认值。分配、循环和两个循环后步骤都已逐字节确认:
```c
function CreateDefaultTpuCompEnv(sdm_fdo_config): // 0x1d73dfa0
env = operator new(0x15E8) // sizeof(TCE) = 5608
TpuCompilationEnvironment::ctor(env, /*arena=*/0)
md = GetMetadata(&TpuCompilationEnvironment_globals_)
fields = md.descriptor.field_array // md+64, stride 88 B per field
for field in fields: // loop while i < md.field_count
flag = TpuCompEnvReflection::GetFlagForField(field) // CHECK OK @reflection: line 5755
value = TpuCompEnvReflection::ReadFlag(flag, field) // CHECK OK @line 5758
if field.options.is_used_at_runtime: // field+56 → options+125
runtime_fields.push_back(field) // collected for the diff below
TpuCompEnvReflection::SetEnvField(value, field, env) // CHECK OK @line 5765
if sdm_fdo_config != null:
env.flag_bits[25] |= 0x20 // mark fdo-config present
env.sparse_dense_matmul_fdo_config (+0x280) = sdm_fdo_config.CopyFrom()
// Deprecated-flag tripwire:
diff = MessageDifferencer(report_to_string)
diff.CompareWithFields(env, GetTpuCompEnvWithDefaultValues(), runtime_fields)
if diff != empty:
LOG("[DEPRECATED_XLA_TPU_FLAG_USE] Deprecated TpuCompilationEnvironment "
"flags were present and not matching their default values:\n" + diff) // line 5776
return env循环是核心机制:对每个 FieldDescriptor,GetFlagForField 通过以 descriptor 指针为 key 的 FlagFieldMappings Swiss-table 解析 absl::Flag(_mm_crc32_u64 hash,vpcmpeqb/vpmovmskb group probe),ReadFlag 分派到一个 ReadFlagImpl<T> 模板,该模板通过 flag vtable 拉取 flag 默认值(vtable+24 validate,vtable+56 TypeId check against FastTypeTag<T>,vtable+72 read default),而 SetEnvField 将其存到字段偏移处。任何 GetFlagForField / ReadFlag 失败都是 CHECK 失败(fatal),因此如果某个字段缺少 flag,构建会在这里 abort,而不是静默使用错误默认值。
怪癖 — FDO-config copy 写入 struct 偏移
+0x280(640),并设置env+25处 flag byte 的 bit0x20。这是CreateDefaultTpuCompEnv在 descriptor 循环之外写入的唯一字段;它来自调用者参数,而不是 flag 默认值。其他每个字段都纯粹从其FLAGS_<name>默认值种入。
GetTpuCompEnvWithDefaultValues — 缓存的默认 singleton
GetTpuCompEnvWithDefaultValues @0x1d73f100 是一个由 __cxa_guard 保护的 lazy absl::NoDestructor singleton。首次调用时,它实体化默认 env(通过 descriptor 循环所用的同一个 $_0 lambda),把它 placement-new 到静态 NoDestructor 槽中,然后对栈临时对象运行 SharedDtor。后续调用返回缓存指针。它是两个单字段覆盖器用来判断字段是否“仍为默认值”的参考。
SetFieldFromFlagString — 解析并设置单个字段
SetFieldFromFlagString @0x1d73fcc0 根据该字段的 absl::CommandLineFlag,从字符串值写入一个字段:
function SetFieldFromFlagString(flag, value_str, env): // 0x1d73fcc0
field = TpuCompEnvReflection::GetFieldForFlag(flag) // reverse map; err @line 5905
value = TpuCompEnvReflection::ParseFlagFromString(flag, field, value_str)
if value is error: // err @line 5908
return error
return TpuCompEnvReflection::SetEnvField(value, field, env)
```text
`GetFieldForFlag` @`0x1d74ab20` 是 `GetFlagForField` 的反向映射,即同一个 `FlagFieldMappings` 结构,换方向作为 key。解析后的值是一个 20-alternative `std::variant`(标量类型加上 `RangeSpecProto`、`RepeatedStrings`、`SparseDenseMatmulFdoConfig`、MSA option message、`BufferContentsSanitizerConfig`、`BufferIsolationConfig`、`AutoProto`);`SetEnvField` @`0x1d752ae0` visit 该 variant,并在对应偏移处存入字段。
### `OverwriteFieldIfNotDefault` — 知晓冲突的覆盖器
`OverwriteFieldIfNotDefault` @`0x1d73f360` 接收一个*源*字段和一个*目标*字段,并且只在安全时复制 source→dest。它用于把一个重命名/弃用字段的值迁移到其替代字段上,同时不覆盖显式设置的替代字段:
```c
function OverwriteFieldIfNotDefault(src_name, dst_name, env): // 0x1d73f360
md = GetMetadata(&TpuCompilationEnvironment_globals_)
dst_fd = md.FindFieldByName(dst_name) // err "Could not find field … " @line 5851
src_fd = md.FindFieldByName(src_name) // err "Could not find field … " @line 5858
defaults = GetTpuCompEnvWithDefaultValues()
src_cur = GetFieldValueAsString(src_fd, env) // @line 5869
src_def = GetFieldValueAsString(src_fd, defaults) // @line 5872
if src_cur == src_def:
return OK // source untouched → nothing to migrate
dst_cur = GetFieldValueAsString(dst_fd, env) // @line 5885
dst_def = GetFieldValueAsString(dst_fd, defaults) // @line 5888
if dst_cur == dst_def: // dest still default → safe to overwrite
value = GetFieldValue(src_fd, env) // @line 5881
return SetEnvField(value, dst_fd, env)
// both non-default → conflict, keep dest:
LOG("Both " + src_name + " and " + dst_name +
" were set to non-default values; keeping the value of " + src_name) // line 5890
return OK陷阱 — 第 5890 行的冲突消息说“keeping the value of
src_name”,但发出该消息的代码路径不会写入,它会让目标字段保持已经设置的非默认值。日志文本命名了源字段,但实际保留下来的是 dest。重新实现者若逐字复制该字符串,不应同时复制对其语义的误读:当两者均为非默认值时,目标保持不变,源值被丢弃。
值得注意的默认值
这些是非平凡默认值,即重新实现者必须复现的“magic numbers”。字段号来自字典;偏移来自 parse table;值逐字节来自 FlagImpl+0x48。
7 个 wrapper-enum 默认值
67 个 Tristate 类型 enum 根据 AUTO 解析拆分默认值(21 ENABLED,37 AUTO,9 DISABLED)。7 个非 Tristate wrapper enum 携带这些具体默认值:
| Field# | 名称 | Enum | 默认值 |
|---|---|---|---|
| #31 | xla_memory_scheduler | MemorySchedulerProto.Value | 0 (DEFAULT) |
| #132 | xla_tpu_verify_or_assign_tiling_before_lowering | VerifyOrAssignTilingFlags.Value | 1 (VERIFY) |
| #487 | xla_tpu_vmac_transform_strategy | TpuVmacTransformStrategy.Value | 0 (NONE) |
| #583 | xla_tpu_sdc_checker_checksum_algo | ChecksumAlgoProto.Value | 0 (DEFAULT) |
| #631 | xla_tpu_register_selection_policy | RegSelectPolicyProto.Value | 6 (DISREGARD_RECENTLY_USED) |
| #723 | xla_tpu_precision_tracer_mode | PrecisionTracerModeProto.Value | 0 (NONE) |
| #827 | xla_sc_async_wrapper_fusion_type | ScAsyncWrapperFusionType.Value | 3 (SINGLE_TPU_CUSTOM_CALL) |
#631 = 6 已通过 Gen 函数体 @0x1d723540(movb $0x6)逐字节确认。
7 个非空字符串默认值
其他 30 个 string 字段默认值为 ""。
| Field# | 名称 | 默认值 |
|---|---|---|
| #198 | xla_jf_hlo_deduplicate_only | "true" |
| #209 | config_criterion | "min" |
| #212 | rematerialization_algorithm | "treewidth" |
| #393 | xla_tpu_nested_dot_fusion_supported_custom_ops | "PartialReduce" |
| #578 | xla_tpu_alternate_memory_benefit_scaling_factor_for_large_buffers | "SQRT" |
| #656 | xla_tpu_collect_sflag_wait_stats_filter | "all" |
| #739 | xla_tpu_synthetic_compute_in_sflag_wait_filter | "all" |
#212 = "treewidth" 已通过 Gen 函数体 @0x1d718ee0 逐字节确认(movabs 0x7464697765657274 = "treewidt" + 'h')。
值得注意的整数默认值
| Field#(s) | 名称 | 默认值 |
|---|---|---|
| #55/56/57, #184 | arf / ars / agf / crs combiner threshold (bytes) | 125,829,120 (120 MiB) |
| #58 | xla_jf_crs_combiner_threshold_count | 256 |
| #41 | xla_hlo_scheduling_brkga_generation_limit | 1200 |
| #42 | xla_hlo_scheduling_brkga_computation_limit | 3 |
| #12/13 | net-router ring limits (cross-module / cross-replica) | 8 / 16 |
| #18/19 | cmem max outstanding prefetches / evictions | 40 / 40 |
| #40 | xla_hbm_logging_buffer_size_bytes | 1,048,576 (1 MiB) |
| #74 | xla_tpu_rematerialization_min_size_in_bytes | 10,485,760 (10 MiB) |
| #107 | xla_jf_vliw_fuel | INT64_MAX (unlimited) |
| #128 | xla_tpu_min_elements_for_while_loop_concat_code_motion | INT64_MAX |
| #149 | xla_max_concurrent_send_recv | INT32_MAX (2147483647) |
| #151 | xla_tpu_licm_analysis_allowance | 100,000 |
| #166 | xla_jf_loop_trip_count | 4 |
| #255 | xla_jf_overlay_compression_threshold | 2,044,723,200 (0x79e00000) |
#166 = 4 和 #255 = 0x79e00000 是逐字节确认的内联字面量(+0x48 无 reloc)。
值得注意的 float / double 默认值
MSA overlap-ratio 三元组(max / min / pref)在五个 memory family 中重复出现。它们是最常复用的默认值模式;请按 family 精确复现。
| Family | 字段(max/min/pref) | max | min | pref |
|---|---|---|---|---|
| jf | #280 / #284 / #285 | 32.0 | 1.0 | 2.0 |
| vf | #442 / #446 / #447 | 8.0 | 1.0 | 2.0 |
| gf | #540 / #544 / #545 | 8.0 | 1.0 | 2.0 |
| cmem | #309 / #313 / #314 | 8.0 | 1.0 | 2.0 |
| msa | #790 / #788 / #789 | 8.0 | 1.0 | 2.0 |
其他值得注意的标量:#592 MSA inefficient-use-to-copy ratio = 0.5(已通过 movl 0x3F000000 @0x1d721c60 逐字节确认)、#459 auto-SPMD memory-budget ratio = 1.1(f32 1.10000002)、#389 megacore-fusion scaling factor = 2.0、#319 copy-fusion pad/unpad ratio = 300.0、#364 experimental max padding = 0.125 GiB、#30 embedding-table oblongness = 50.0、#176 fusion max vmem = 15.0 MiB。
注意 — 这些仅是 flag-default baseline。有效的逐芯片默认值是
baseline ⊕ overlay:ComputeMemorySpaceAssignmentOptions和目标 jump table 会按 TPU generation 覆盖每个 family 的 MSA 字段(v0/1→jf,v2→cmem,v3→vf,v4/5→gf)。JAX/PJRT 用户在给定芯片上获得的是 baseline 与该 overlay 的组合。overlay 本身不在本页范围内;参见 TpuCompilationEnvironment 中引用的 MSA per-codename 材料。
本页未覆盖的内容
- has-bit 打包。 每字段
has_idx已恢复,但has_idx→(struct word,bit)映射尚未重新走查(LOW)。读取序列化 env 中的字段presence需要它。 - 按版本的 overlay 值。 本页是 flag-default baseline;
ComputeMemorySpaceAssignmentOptionsfamily overrides 由其他页面负责。 - field#→name→type schema。 由 TCE Field Dictionary (A) / (B) 负责。
- AutoProto message-arm 子默认值。 message 字段在这里默认其空实例;12 个 message-typed AutoProto arm 各自有子 message 默认值,由 AutoProto / AutoOr Resolution 负责。
交叉引用
- TpuCompilationEnvironment — 这些偏移和默认值所填充的 5608 字节对象的结构总览
- TCE Field Dictionary (A) — field# → name → type schema(字段第 1 部分);本页将偏移和默认值连接到的 schema
- TCE Field Dictionary (B) — field# → name → type schema(字段第 2 部分)
- AutoProto / AutoOr Resolution — message/oneof 字段如何在使用时解析其 AUTO 默认 arm
- XLA Flag Atlas — 提供每个
+0x48默认值的FLAGS_<name>flag registry - Configuration Overview — TCE 在 config/compile-knob 子系统中的位置