From 46d998a36b2103e70a7057de852604264feec070 Mon Sep 17 00:00:00 2001 From: ChaoZheng109 Date: Wed, 1 Jul 2026 09:52:42 +0800 Subject: [PATCH] refactor(runtime): move orch_device_id into aicpu_device_config, out of platform_regs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit orch_device_id is the ACL device ordinal latched once per device by simpler_aicpu_init (from InitArgs.device_id) and read by the AICPU executor to make the staged orchestration SO filename unique per device. It is a per-device run-invariant knob — the same category as scheduler_timeout — and has nothing to do with per-core register addressing, so platform_regs was the wrong home. Now that aicpu_device_config exists as the dedicated home for per-device AICPU config latched by simpler_aicpu_init, move set/get_orch_device_id + the global there, alongside set/get_scheduler_timeout_ms. platform_regs is left strictly for per-core register access. - aicpu_device_config.{h,cpp}: add set/get_orch_device_id + g_orch_device_id. - platform_regs.{h,cpp} (a5 + a2a3): remove them. - aicpu_executor.cpp (a5 + a2a3): include aicpu_device_config.h for the get_orch_device_id consumer (still needs platform_regs.h for get_platform_regs). - kernel.cpp / sim device_runner: unchanged — the symbol name is identical, only its defining TU moved (same AICPU SO; sim dlsym still resolves it). No behavior change. Verified: all four quadrants build; runtime_fatal_codes scheduler_timeout (which exercises the register->orch-SO path) passes on a5sim + a2a3sim. Stacked on #1223 (which introduces aicpu_device_config). --- src/a2a3/platform/include/aicpu/platform_regs.h | 11 ----------- src/a2a3/platform/shared/aicpu/platform_regs.cpp | 5 ----- .../tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp | 1 + src/a5/platform/include/aicpu/platform_regs.h | 11 ----------- src/a5/platform/shared/aicpu/platform_regs.cpp | 5 ----- .../tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp | 1 + .../platform/include/aicpu/aicpu_device_config.h | 11 +++++++++++ .../platform/shared/aicpu/aicpu_device_config.cpp | 7 ++++++- 8 files changed, 19 insertions(+), 33 deletions(-) diff --git a/src/a2a3/platform/include/aicpu/platform_regs.h b/src/a2a3/platform/include/aicpu/platform_regs.h index 392f0ecc3..4a4df9f4a 100644 --- a/src/a2a3/platform/include/aicpu/platform_regs.h +++ b/src/a2a3/platform/include/aicpu/platform_regs.h @@ -66,17 +66,6 @@ void set_platform_pmu_reg_addrs(uint64_t pmu_regs); */ uint64_t get_platform_pmu_reg_addrs(); -/** - * Set the ACL device ordinal. Latched once per device by simpler_aicpu_init - * (from InitArgs.device_id) into this resident-SO global; the executor reads it - * to make the staged orchestration SO filename unique per device so paired dies - * sharing the preinstall filesystem never collide. - */ -void set_orch_device_id(int device_id); - -/** Get the ACL device ordinal set for the current run (0 if unset). */ -int get_orch_device_id(); - #ifdef __cplusplus } #endif diff --git a/src/a2a3/platform/shared/aicpu/platform_regs.cpp b/src/a2a3/platform/shared/aicpu/platform_regs.cpp index b5fc50d1c..055300a14 100644 --- a/src/a2a3/platform/shared/aicpu/platform_regs.cpp +++ b/src/a2a3/platform/shared/aicpu/platform_regs.cpp @@ -37,7 +37,6 @@ static uint64_t g_platform_regs = 0; static uint64_t g_platform_pmu_reg_addrs = 0; -static int g_orch_device_id = 0; void set_platform_regs(uint64_t regs) { g_platform_regs = regs; } @@ -47,10 +46,6 @@ void set_platform_pmu_reg_addrs(uint64_t pmu_regs) { g_platform_pmu_reg_addrs = uint64_t get_platform_pmu_reg_addrs() { return g_platform_pmu_reg_addrs; } -void set_orch_device_id(int device_id) { g_orch_device_id = device_id; } - -int get_orch_device_id() { return g_orch_device_id; } - volatile uint32_t *get_reg_ptr(uint64_t reg_base_addr, RegId reg) { return reinterpret_cast(reg_base_addr + reg_offset(reg)); } diff --git a/src/a2a3/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp b/src/a2a3/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp index 19f6a7e7c..983d47830 100644 --- a/src/a2a3/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp +++ b/src/a2a3/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp @@ -45,6 +45,7 @@ #include "common/unified_log.h" // Register-based communication +#include "aicpu/aicpu_device_config.h" #include "aicpu/platform_aicpu_affinity.h" #include "aicpu/platform_regs.h" #include "common/platform_config.h" diff --git a/src/a5/platform/include/aicpu/platform_regs.h b/src/a5/platform/include/aicpu/platform_regs.h index caad59443..9e8e3a635 100644 --- a/src/a5/platform/include/aicpu/platform_regs.h +++ b/src/a5/platform/include/aicpu/platform_regs.h @@ -57,17 +57,6 @@ void set_platform_regs(uint64_t regs); */ uint64_t get_platform_regs(); -/** - * Set the ACL device ordinal. Latched once per device by simpler_aicpu_init - * (from InitArgs.device_id) into this resident-SO global; the executor reads it - * to make the staged orchestration SO filename unique per device so paired dies - * sharing the preinstall filesystem never collide. - */ -void set_orch_device_id(int device_id); - -/** Get the ACL device ordinal set for the current run (0 if unset). */ -int get_orch_device_id(); - #ifdef __cplusplus } #endif diff --git a/src/a5/platform/shared/aicpu/platform_regs.cpp b/src/a5/platform/shared/aicpu/platform_regs.cpp index 501942fd4..6a74d2a21 100644 --- a/src/a5/platform/shared/aicpu/platform_regs.cpp +++ b/src/a5/platform/shared/aicpu/platform_regs.cpp @@ -26,16 +26,11 @@ #include "spin_hint.h" static uint64_t g_platform_regs = 0; -static int g_orch_device_id = 0; void set_platform_regs(uint64_t regs) { g_platform_regs = regs; } uint64_t get_platform_regs() { return g_platform_regs; } -void set_orch_device_id(int device_id) { g_orch_device_id = device_id; } - -int get_orch_device_id() { return g_orch_device_id; } - void platform_init_aicore_regs(uint64_t reg_addr) { // Initialize task dispatch register to idle state write_reg(reg_addr, RegId::DATA_MAIN_BASE, AICPU_IDLE_TASK_ID); diff --git a/src/a5/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp b/src/a5/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp index 6b8f310da..b40d7fda3 100644 --- a/src/a5/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp +++ b/src/a5/runtime/tensormap_and_ringbuffer/aicpu/aicpu_executor.cpp @@ -46,6 +46,7 @@ #include "common/unified_log.h" // Register-based communication +#include "aicpu/aicpu_device_config.h" #include "aicpu/platform_regs.h" #include "common/platform_config.h" diff --git a/src/common/platform/include/aicpu/aicpu_device_config.h b/src/common/platform/include/aicpu/aicpu_device_config.h index 38ec22e30..9667c0446 100644 --- a/src/common/platform/include/aicpu/aicpu_device_config.h +++ b/src/common/platform/include/aicpu/aicpu_device_config.h @@ -28,6 +28,17 @@ extern "C" { #endif +/** + * Set the ACL device ordinal. Latched once per device by simpler_aicpu_init + * (from InitArgs.device_id) into this resident-SO global; the AICPU executor + * reads it to make the staged orchestration SO filename unique per device so + * paired dies sharing the preinstall filesystem never collide. + */ +void set_orch_device_id(int device_id); + +/** Get the ACL device ordinal set for the current run (0 if unset). */ +int get_orch_device_id(); + /** * Set the AICPU scheduler no-progress watchdog timeout (ms). Latched once per * device by simpler_aicpu_init (from InitArgs.scheduler_timeout_ms); read by diff --git a/src/common/platform/shared/aicpu/aicpu_device_config.cpp b/src/common/platform/shared/aicpu/aicpu_device_config.cpp index 4d6d38e91..eea91e456 100644 --- a/src/common/platform/shared/aicpu/aicpu_device_config.cpp +++ b/src/common/platform/shared/aicpu/aicpu_device_config.cpp @@ -11,11 +11,16 @@ #include "aicpu/aicpu_device_config.h" namespace { -// Latched once per device by simpler_aicpu_init; survives every per-task launch +// Latched once per device by simpler_aicpu_init; survive every per-task launch // because the AICPU inner SO stays dlopen'd for the runner's life. +int g_orch_device_id = 0; int g_scheduler_timeout_ms = 0; } // namespace +void set_orch_device_id(int device_id) { g_orch_device_id = device_id; } + +int get_orch_device_id() { return g_orch_device_id; } + void set_scheduler_timeout_ms(int timeout_ms) { g_scheduler_timeout_ms = timeout_ms; } int get_scheduler_timeout_ms() { return g_scheduler_timeout_ms; }