System descriptor field guide
A system descriptor records CPU targets, chip resources, and chip connectivity.
The compiler represents it as #ttcore.system_desc; a standalone .ttsys file
stores a SystemDescRoot FlatBuffer containing a SystemDesc. For obtaining or
inspecting a descriptor, see TTRT query and
TTRT read. The device attribute describes
a compiler view over this system, including a mesh shape and selected chips.
The tables below use the FlatBuffer field names. In textual MLIR, grid_size
is named grid and dram_grid_size is named dram_grid. Two-dimensional
sizes and coordinates are ordered y, x (rows, columns for sizes). Memory
sizes, addresses, and alignment values are in bytes, unless stated otherwise.
SystemDesc
Field |
Meaning |
|---|---|
|
CPU target descriptions. Each entry contains |
|
Chip resource descriptions; see ChipDesc. This array is addressed through |
|
Maps a chip’s position in the system descriptor to an index in |
|
Per-chip capability bit masks. |
|
Chip placement records with fields |
|
Ethernet connections, each described by two device IDs and their Ethernet core coordinates; see ChipChannel. This list is optional in the MLIR assembly format. |
In textual MLIR, the lists in #ttcore.system_desc are positional, in the
order shown above; the final channel list may be omitted.
Chip indices versus device IDs
For a chip position i, SystemDescAttr::getChipDesc(i) performs:
chip_descs[chip_desc_indices[i]]
Both array accesses must be in range. The indirection permits chips to share
a descriptor; it does not require producers to deduplicate descriptors.
The current runtime sorts the queried devices by TT-Metal device ID, appends
one ChipDesc per device, and writes chip_desc_indices = [0, 1, ...].
For example, if the queried devices have IDs 4 and 7, their chip positions are
0 and 1, and the runtime emits descriptor indices [0, 1], not [4, 7].
Looking up the second chip uses getChipDesc(1). Ethernet channel endpoints
still use device IDs 4 and 7. A hypothetical deduplicating producer could instead
store one shared descriptor with indices [0, 0]; this illustrates the mapping,
not the current runtime output.
The chipIds in the compiler’s device attribute
refer to chip indices in the system descriptor. Do not substitute channel
endpoint IDs for these indices. The distinction motivated the correction
discussed in PR #3758.
ChipDesc
Field |
Meaning and current runtime source |
|---|---|
|
Chip architecture: |
|
Compute-with-storage worker grid dimensions, from |
|
Translated NoC0 coordinate of logical worker |
|
L1 capacity per core, from |
|
Number of DRAM channels, from |
|
DRAM capacity per channel, from |
|
NoC L1 address alignment, from HAL |
|
PCIe address alignment, from HAL |
|
NoC DRAM address alignment, from HAL |
|
Start of the L1 region available to the allocator, from |
|
Unreserved Ethernet RISC L1 base, from HAL |
|
Start of the allocator’s unreserved DRAM region, from |
|
Exclusive upper bound of the compiler-usable DRAM region per channel. |
|
Data types advertised by the descriptor. The runtime currently uses explicit lists, including a separate Quasar list, rather than querying support for each type. This is not a promise that every operation supports every listed type. |
|
Advertised Tensix tile shapes in y, x order. The runtime currently uses the fixed list |
|
Physical destination-register capacity expressed in tiles; currently set to 16 by the runtime producer. The compiler’s logical tile capacity can be smaller: |
|
Number of circular buffers, taken from TT-Metal’s |
|
Compute-thread count recorded for a worker. The runtime sets 1 for Wormhole/Blackhole and 4 for Quasar. |
|
Programmable data-movement-thread count recorded for a worker. The runtime sets 2 for Wormhole/Blackhole and 6 for Quasar; its Quasar comment distinguishes 6 programmable from 8 physical DM cores. |
|
DRAM grid dimensions from |
|
DRAM-bank-indexed logical worker coordinates returned by |
|
Corresponding bank-to-logical-worker assignment for |
The compiler computes usable DRAM bytes per channel as
dram_unreserved_end - dram_unreserved_base. Neither this value nor
l1_size - l1_unreserved_base reports how much memory is currently free after
allocations.
ChipChannel
Field |
Meaning |
|---|---|
|
TT-Metal device ID of the first endpoint. |
|
First endpoint’s Ethernet core coordinate, serialized in y, x order. |
|
TT-Metal device ID of the second endpoint. |
|
Second endpoint’s Ethernet core coordinate, serialized in y, x order. |
The runtime’s getAllDeviceConnections() uses active Ethernet cores and
get_connected_ethernet_core(). It orders endpoints by device ID and deduplicates
the resulting connections. Connections whose lookup throws are skipped, so the
list should not be treated as a complete inventory of all external connections.
The coordinates come from those TT-Metal Ethernet APIs; they are not worker-grid
indices or chip placement coordinates.
SystemDescRoot (.ttsys envelope)
Field |
Meaning |
|---|---|
|
TT-MLIR producer version, with |
|
Generated system-descriptor FlatBuffer schema hash. |
|
Producer’s TT-MLIR Git revision string. |
|
Product identifier string; the current runtime writes the placeholder |
|
The |
The standalone format is a size-prefixed FlatBuffer with file identifier TTSY
and extension .ttsys. The envelope metadata is separate from the fields of
the compiler’s #ttcore.system_desc attribute.
Queried descriptors and compiler defaults
A runtime query obtains resource values from the opened mesh’s devices, HAL,
and allocators, but it also includes the fixed values and placeholders noted
above. In particular, chip_coords and product_identifier do not identify
the actual physical installation.
SystemDescAttr::getDefault() instead constructs architecture-specific defaults
in the compiler. These are not a hardware query. For multiple chips, the current
default builders assume a ring topology with (0, 0) Ethernet core coordinates.
Use the producer and provenance of a descriptor when interpreting its values;
do not treat default or placeholder topology as discovered connectivity.
Source reference
The field definitions and the producer/consumer behavior described here are in:
Runtime descriptor producer, including
getCurrentSystemDescImpl(),getCoordinateTranslationOffsets(),calculateDRAMUnreservedEnd(), andgetAllDeviceConnections().