Skip to content

TCE 字段偏移与标志默认值

本页所有地址均适用于 libtpu-0.0.40-cp314 wheel 中的 libtpu.so(build-id md5 89edbbe81c5b328a958fe628a9f2207d,内部标签 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 @0x1d73fcc0OverwriteFieldIfNotDefault @0x1d73f360,随后覆盖单个字段。

读者应把本页视为桥接层。schema(名称、类型、wrapper enum、HOT 标签)在字典页;message/oneof 字段的 AUTO-arm 解析在 AutoProto / AutoOr Resolution;对象结构总览在 TpuCompilationEnvironment。这里把 field# 连接到偏移默认值,并追踪 flag 写入路径。

对于重新实现,契约是:

  • 偏移公式 — 如何从 TcParseTableBase 头部常量和 FieldEntry 数组,确定性地计算任意 1121 个字段的 struct_offset(field N)
  • 默认值机制FlagImpl+0x48 union、kGenFunc-vs-kOneWord 判别器(是否存在 reloc),以及如何解码每种基础类型的 immediate。
  • 种子驱动和两个覆盖器CreateDefaultTpuCompEnv 的逐字段循环,以及带有“both set”冲突规则的 SetFieldFromFlagString / OverwriteFieldIfNotDefault 单字段写入路径。
  • 默认值统计 — 哪些值是非平凡的(120 MiB combiner 阈值、INT64_MAX fuel 旋钮、MSA overlap-ratio 三元组、7 个 wrapper-enum 默认值),以便重新实现者能复现字节一致的默认 env。
偏移 oracleTpuCompilationEnvironment::_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
单字段 writerSetFieldFromFlagString @0x1d73fcc0OverwriteFieldIfNotDefault @0x1d73f360
默认 singletonGetTpuCompEnvWithDefaultValues @0x1d73f100NoDestructor,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 头部开始。逐字节解码如下:

text
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 的偏移因此为:

c
// 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_RELATIVE reloc 指向 +0x48,该 union 保存一个指向 AbslFlagDefaultGenFor<name>::Gen 的函数指针。该函数体用一个 mov imm 把默认值写入调用者缓冲区。507 个字段。
  • kOneWord — 如果没有 reloc 指向 +0x48,这八个字节就是字面值。614 个字段。

Gen 函数体解码

Gen 函数体是最小可能函数:存一个 immediate,然后返回。四个逐字节确认的示例(反编译函数体,精确地址):

c
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

循环是核心机制:对每个 FieldDescriptorGetFlagForField 通过以 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 的 bit 0x20。这是 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,从字符串值写入一个字段:

c
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默认值
#31xla_memory_schedulerMemorySchedulerProto.Value0 (DEFAULT)
#132xla_tpu_verify_or_assign_tiling_before_loweringVerifyOrAssignTilingFlags.Value1 (VERIFY)
#487xla_tpu_vmac_transform_strategyTpuVmacTransformStrategy.Value0 (NONE)
#583xla_tpu_sdc_checker_checksum_algoChecksumAlgoProto.Value0 (DEFAULT)
#631xla_tpu_register_selection_policyRegSelectPolicyProto.Value6 (DISREGARD_RECENTLY_USED)
#723xla_tpu_precision_tracer_modePrecisionTracerModeProto.Value0 (NONE)
#827xla_sc_async_wrapper_fusion_typeScAsyncWrapperFusionType.Value3 (SINGLE_TPU_CUSTOM_CALL)

#631 = 6 已通过 Gen 函数体 @0x1d723540movb $0x6)逐字节确认。

7 个非空字符串默认值

其他 30 个 string 字段默认值为 ""

Field#名称默认值
#198xla_jf_hlo_deduplicate_only"true"
#209config_criterion"min"
#212rematerialization_algorithm"treewidth"
#393xla_tpu_nested_dot_fusion_supported_custom_ops"PartialReduce"
#578xla_tpu_alternate_memory_benefit_scaling_factor_for_large_buffers"SQRT"
#656xla_tpu_collect_sflag_wait_stats_filter"all"
#739xla_tpu_synthetic_compute_in_sflag_wait_filter"all"

#212 = "treewidth" 已通过 Gen 函数体 @0x1d718ee0 逐字节确认(movabs 0x7464697765657274 = "treewidt" + 'h')。

值得注意的整数默认值

Field#(s)名称默认值
#55/56/57, #184arf / ars / agf / crs combiner threshold (bytes)125,829,120 (120 MiB)
#58xla_jf_crs_combiner_threshold_count256
#41xla_hlo_scheduling_brkga_generation_limit1200
#42xla_hlo_scheduling_brkga_computation_limit3
#12/13net-router ring limits (cross-module / cross-replica)8 / 16
#18/19cmem max outstanding prefetches / evictions40 / 40
#40xla_hbm_logging_buffer_size_bytes1,048,576 (1 MiB)
#74xla_tpu_rematerialization_min_size_in_bytes10,485,760 (10 MiB)
#107xla_jf_vliw_fuelINT64_MAX (unlimited)
#128xla_tpu_min_elements_for_while_loop_concat_code_motionINT64_MAX
#149xla_max_concurrent_send_recvINT32_MAX (2147483647)
#151xla_tpu_licm_analysis_allowance100,000
#166xla_jf_loop_trip_count4
#255xla_jf_overlay_compression_threshold2,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)maxminpref
jf#280 / #284 / #28532.01.02.0
vf#442 / #446 / #4478.01.02.0
gf#540 / #544 / #5458.01.02.0
cmem#309 / #313 / #3148.01.02.0
msa#790 / #788 / #7898.01.02.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 ⊕ overlayComputeMemorySpaceAssignmentOptions 和目标 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;ComputeMemorySpaceAssignmentOptions family overrides 由其他页面负责。
  • field#→name→type schema。TCE Field Dictionary (A) / (B) 负责。
  • AutoProto message-arm 子默认值。 message 字段在这里默认其实例;12 个 message-typed AutoProto arm 各自有子 message 默认值,由 AutoProto / AutoOr Resolution 负责。

交叉引用