Files
TheRock/rocm-systems/emulation/rocjitsu/schemas/simulation_config.fbs
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

245 lines
11 KiB
Plaintext

// Copyright (c) 2026 Advanced Micro Devices, Inc.
// SPDX-License-Identifier: MIT
//
// FlatBuffers schema for AMDGPU simulation configuration.
// Used for both JSON config parsing and binary serialization.
namespace rocjitsu.fb;
/// Configuration for a single compute unit.
table ComputeUnitConfig {
num_wf_slots: uint32; // Number of hardware wavefront slots (contexts).
sgprs_per_wf: uint32; // Scalar GPRs per wavefront.
vgprs_per_wf: uint32; // Vector GPRs per wavefront.
lds_size_kb: uint32; // Local Data Share size in kilobytes.
functional_quantum: uint32; // Max instructions per advance() in FUNCTIONAL mode (0 = unbounded).
}
/// Configuration for a command processor.
table CommandProcessorConfig {
max_queued_packets: uint32; // Maximum packets that can be queued (0 = unlimited).
}
/// Configuration for a shader engine.
table ShaderEngineConfig {
num_compute_units: uint32; // Number of CUs in this shader engine.
compute_unit: ComputeUnitConfig; // Shared CU configuration for all CUs.
}
/// Configuration for an Accelerator Complex Die (XCD).
table XcdConfig {
num_shader_engines: uint32; // Number of shader engines in this XCD.
shader_engine: ShaderEngineConfig; // Shared SE configuration for all SEs.
command_processor: CommandProcessorConfig;
}
/// Configuration for GPU memory.
table GpuMemoryConfig {
size_mb: uint32; // Memory size in megabytes (for future limits).
memory_side_cache_mb: uint32; // Memory-side cache size in MB (0 = disabled).
}
/// KFD device identity and topology properties for sysfs generation.
/// These values are written to /sys/class/kfd/kfd/topology/nodes/<N>/properties
/// and consumed by ROCR, HIP, rocprofiler, and AMD SMI for GPU discovery.
///
/// Reference sources for field values:
/// - KFD topology kernel driver: drivers/gpu/drm/amd/amdkfd/kfd_topology.c
/// - ROCR libhsakmt parsing: projects/rocr-runtime/libhsakmt/src/topology.c
/// - ROCR type definitions: projects/rocr-runtime/libhsakmt/include/hsakmt/hsakmttypes.h
/// - PCI device IDs: https://pci-ids.ucw.cz/read/PC/1002 (vendor 0x1002 = AMD)
/// - GFX target versions: projects/rocr-runtime/runtime/hsa-runtime/core/inc/amd_gpu_agent.h
/// - Real hardware values: `cat /sys/class/kfd/kfd/topology/nodes/*/properties` on a system
/// with the target GPU installed.
///
/// \NPI new GPU: add a configs/<gpu>.json that fills in these identity fields for the new device.
table KfdDeviceInfo {
gpu_id: uint32; // KFD GPU ID (e.g., 0x9500 for gfx950).
gfx_target_version: uint32; // Packed GFX version (e.g., 90500 for gfx950).
vendor_id: uint32 = 4098; // PCI vendor ID (0x1002 = AMD).
device_id: uint32; // PCI device ID (from pci-ids.ucw.cz).
family_id: uint32; // GPU family (from amdgpu_drv.c AMDGPU_FAMILY_*).
unique_id: uint64; // Globally unique GPU identifier (PSP-generated on real HW).
marketing_name: string; // Human-readable name (e.g., "AMD Instinct MI350X").
drm_render_minor: uint32 = 128; // DRM render device minor number.
revision_id: uint32 = 0; // amdgpu adev->rev_id; KFD capability ASIC revision bits.
pci_revision_id: uint32 = 0; // PCI config-space revision from DRM sysfs device/revision.
// Compute organization (from kfd_topology.c kfd_fill_gpu_properties)
simd_count: uint32; // Total SIMD units (CUs * SIMDs/CU).
max_waves_per_simd: uint32 = 10;
num_shader_engines: uint32; // KFD array_count: total shader arrays, not libdrm SE count.
num_shader_arrays_per_engine: uint32 = 1;
num_cu_per_sh: uint32;
simd_per_cu: uint32 = 4; // 4 for CDNA, 2 for RDNA.
wave_front_size: uint32 = 64; // 64 for CDNA, 32 for RDNA.
max_slots_scratch_cu: uint32 = 32;
// Memory (from kfd_topology.c and amdgpu_amdkfd.c)
local_mem_size: uint64; // VRAM size in bytes.
lds_size_kb: uint32 = 64; // 64 for CDNA1/2, 128 for CDNA3/4 and RDNA2+.
mem_width: uint32 = 4096; // HBM interface width in bits.
mem_clk_max: uint32 = 1200; // Max memory clock (MHz).
// Caches (from kfd_topology.c kfd_fill_cache_non_crat_info)
l1_size_kb: uint32 = 32;
l1_line_size: uint32 = 128;
l1_assoc: uint32 = 4;
l2_size_kb: uint32 = 4096;
l2_line_size: uint32 = 128;
l2_assoc: uint32 = 16;
// Engines and queues (from kfd_topology.c and amdgpu_amdkfd.c)
num_sdma_engines: uint32 = 2;
num_sdma_xgmi_engines: uint32 = 0;
num_cp_queues: uint32 = 128;
max_engine_clk_fcompute: uint32 = 2100; // MHz
// PCI topology (from kfd_topology.c, used by RCCL for busId uniqueness)
location_id: uint32 = 768; // PCI BDF: 0x0300 = bus 3, dev 0, func 0.
hive_id: uint64 = 0; // XGMI hive ID (shared by GPUs in same node).
domain: uint32 = 0; // PCI domain.
vram_type: uint32 = 6; // AMDGPU_VRAM_TYPE_* (6 = HBM, 9 = GDDR6).
// KFD debugger API (from kfd_sysfs.h HSA_CAP_*/HSA_DBG_* bits). 0 = auto-compute
// from gfx_target_version (see rocjitsu::default_capability_for/debug_prop_for).
capability: uint32 = 0;
capability2: uint32 = 0;
debug_prop: uint64 = 0;
}
/// Top-level AMDGPU configuration.
table AmdgpuConfig {
num_xcds: uint32; // Number of Accelerator Complex Dies.
num_iods: uint32; // Number of I/O Dies (0 = no IOD modeling).
xcd: XcdConfig; // Shared XCD configuration for all XCDs.
memory: GpuMemoryConfig;
device: KfdDeviceInfo; // KFD device identity for sysfs topology.
num_gpus: uint32 = 1; // Number of simulated GPU instances.
}
enum DbtExecutionBackend: byte {
hardware,
simulator,
}
/// Silicon revision for a DBT translation side. gfx1250 A0 and B0 share an ELF
/// machine ID, so the revision is carried out of band and selects the
/// corresponding translation profile. `unspecified` is the default for
/// architectures whose machine ID identifies the silicon.
enum DbtSiliconRevision: byte {
unspecified,
gfx1250_a0,
gfx1250_b0,
}
/// DBT guest-GPU discovery mode.
///
/// The execution_backend selects whether the host agent is backed by real KFD
/// hardware or by a simulation configuration. In both modes the KFD interposer
/// appends one synthetic guest GPU to the execution topology.
/// HSA hooks map execution-facing calls from the guest agent to the host agent
/// and translate guest code objects to host code objects before loading them.
table DbtGuestConfig {
enabled: bool = false; // Enables GuestKfd discovery mode.
guest_isa: string; // Guest ISA advertised by the synthetic agent, e.g. "gfx950".
host_isa: string; // Host ISA used for execution and DBT output, e.g. "gfx942".
host_gpu_id: uint32 = 0; // Preferred host KFD topology gpu_id, not HIP ordinal/node id; 0 matches topology to host_isa.
log_level: int32 = 0; // DBT hook logging: 0 off, 1 info, 2 verbose, 3 debug.
signal_backtrace: bool = false; // Install a best-effort crash backtrace handler in the HSA hook.
guest_device: KfdDeviceInfo; // Synthetic guest KFD/sysfs identity appended to host topology.
execution_backend: DbtExecutionBackend = hardware;
simulator_config: string; // External host config; when set, overrides this file's VM/topology.
guest_revision: DbtSiliconRevision = unspecified; // Guest silicon revision (gfx1250 A0/B0 disambiguation).
host_revision: DbtSiliconRevision = unspecified; // Host silicon revision for DBT output.
}
/// A dispatch packet describing a kernel launch.
table DispatchConfig {
kernel_entry_pc: uint64; // Byte address of kernel entry point.
workgroup_count: uint32; // Number of workgroups to dispatch.
wfs_per_workgroup: uint32; // Wavefronts per workgroup.
sgprs_per_wf: uint32; // Scalar GPRs per wavefront.
vgprs_per_wf: uint32; // Vector GPRs per wavefront.
}
/// A program binary and its dispatch configuration.
table ProgramConfig {
binary_path: string; // Path to the kernel binary file.
base_addr: uint64; // Base address to load the binary at.
dispatches: [DispatchConfig]; // Dispatch packets to enqueue after loading.
}
/// Virtual machine hardware model configuration.
table VirtualMachineConfig {
arch: string; // ISA architecture identifier (e.g., "cdna3", "rv64i").
gpu: AmdgpuConfig; // AMDGPU hardware configuration.
programs: [ProgramConfig]; // Programs to load and dispatch.
}
// ---------------------------------------------------------------------------
// Declarative topology definition tables.
// ---------------------------------------------------------------------------
/// Key-value pair for component configuration.
table ConfigEntry {
key: string;
value: string; // All values as strings, parsed by the factory.
}
/// Port definition for dynamic ports.
table PortDef {
name: string;
direction: string; // "in" or "out".
protocol: string; // "untyped", "memory_req", "memory_resp", "dispatch", etc.
}
/// Component definition (recursive for hierarchy).
table ComponentDef {
name: string; // Name or range pattern like "xcd[0:7]".
type: string; // Registry type: "compute_unit", "l2_cache", etc.
config: [ConfigEntry]; // Component-specific parameters.
children: [ComponentDef]; // Child components (recursive).
ports: [PortDef]; // Optional dynamic ports.
}
/// Range variable for link pattern expansion.
table ForRange {
var_name: string; // Variable name: "i", "j", "k".
start: uint32; // Range start (inclusive).
end: uint32; // Range end (exclusive).
}
/// Link definition (direct or pattern-based).
table LinkDef {
src: string; // Direct source: "soc.xcd0.l2.hbm_out".
dst: string; // Direct destination.
pattern: string; // Pattern: "soc.xcd[i].l2 -> soc.iod[i/4].msc".
for_ranges: [ForRange]; // Loop variables.
where_expr: string; // Filter: "i != j".
latency: uint32 = 1;
weight: uint32 = 1;
}
/// Top-level topology definition.
table TopologyDef {
root: ComponentDef;
links: [LinkDef];
}
// ---------------------------------------------------------------------------
// Top-level simulation configuration.
// ---------------------------------------------------------------------------
/// Top-level simulation configuration.
table SimulationConfig {
max_ticks: uint64; // Maximum simulation ticks before halting.
num_threads: uint32; // Number of simulation threads (partitions).
exec_mode: string; // Execution mode: "functional" (default) or "clocked".
vm: VirtualMachineConfig; // Virtual machine hardware model. Omit for dbt_guest-only configs.
topology: TopologyDef; // Declarative topology. Omit for dbt_guest-only configs.
dbt_guest: DbtGuestConfig; // Optional guest-GPU DBT interposition mode.
}
root_type SimulationConfig;