# Target, loader ABI and runtime ownership

The dependency-leaf ipu-target crate owns IPU21 SRAM and instruction-fetch geometry, exchange register IDs, supervisor instruction encoding, physical routing/pairing and the C600 compute-tile inventory. Topology no longer builds multicast/point-to-point plans: ipu-exchange accepts it in explicit construction functions. The recovered fabric model and calibrated scheduling margins remain distinguishable in the source. Custom nonempty injective topology mappings remain supported.

The SDK secondary-loader frame sizes, startup handoff and loadable memory limit have one definition in ipu-package::loader_abi, shared with the driver. Loadable memory is derived from the frame contract rather than independently hardcoded or conflated with architectural SRAM. Codegen no longer depends on ipu-driver; cargo tree confirms the dependency is absent.

Codegen owns runtime placement/stack/descriptor defaults in runtime_layout. Host packet encoders accept the configured window base, use a common checked relative-address calculation, and no longer define a runtime address. Rust and static_runtime.S consume the same register, opcode and runtime-layout .def inputs. The build-time reader only generates constant declarations; it does not introduce another program representation or runtime adapter. Existing public constant/instruction re-exports name their new defining owners.

Memory-profile rendering receives architectural boundary metadata rather than hardcoding addresses in JavaScript, and profiles record the actual package's physical tile IDs instead of assuming C600's default order. The existing placement-report regression now covers a permuted physical ordering.

Validation:

- Workspace release suite: 426 passed, 0 failed, 8 ignored. The suite includes the relocated target instruction/inventory tests, the SDK exchange encoding/hazard oracles, and host-window translation/wraparound cases.
- SDK-enabled saved_search_preserves_budget_aliases_and_order: passed using real package construction and resumed search.
- After the profile metadata changes, all three place::profile tests passed; the memory viewer JavaScript passes node --check. Final workspace all-target check and formatting/whitespace checks pass.
- FP16 MLP Repeat 3 hardware PASS: maximum absolute error 0.000183; package byte-identical to owner-maps/mlp-f16-repeat3.ipuexe.
- FP8 ViT Repeat 3 hardware PASS: minimum cosine 0.997459656; package byte-identical to owner-maps/vit-fp8-repeat3.ipuexe.
- Real-weight 27-layer SigLIP So400m, BS1, six real images: hardware PASS; package and all six device outputs byte-identical to owner-maps/real-bs1. Minimum FP32-reference cosine 0.994567066. Build plus verification took 101.446 seconds. This is not an isolated compiler timing measurement or a device-speed improvement claim.

The final changes after hardware were profile metadata/display, moving an unchanged instruction function beside its callers, comments, formatting and removing an unused dependency. No generated device work changed. Commands, logs and comparison results are adjacent. Host logs are /tmp/ipu-target-workspace-tests-final2.log, /tmp/ipu-target-replay-test.log, /tmp/ipu-target-profile-tests.log, /tmp/ipu-target-final-check3.log and /tmp/ipu-target-cli-build-final2.log.

Scoped Recipe ownership/preparation, mixed compute storage/access contracts, retained exchange relocation metadata and cache consolidation remain unfinished. This stage completes the independent target/ABI ownership slice; it does not claim completion of the overall refactor or the source-size objective.
