Severity: MEDIUM/HIGH — non-deterministic garbage after context churn. Verified on Strix Halo (NPU2, XRT 2.21.75).
Running several different xclbins in one process (each op compiling its own AIEContext → hw_context) degrades execution: after the LRU cache evicts entries, later kernels return garbage while the ERT state still reports ERT_CMD_STATE_COMPLETED. Repro: compile+run 4+ different GEMM/AXPY ops sequentially in one Python process — the first op is exact, later ones produce wrong values; each op alone in a fresh process is exact.
CachedXRTRuntime has an npu2 single-entry _evict() path (the npu1 path has a documented "full drain" workaround for the same class of problem). The npu2 eviction leaves the device in a state where subsequent dispatches execute incorrectly. Suspect stale instruction/context state after eviction; needs a driver-level repro (possibly tied to the group_id binding issue).
Workaround used for measurements: one op per process.
Severity: MEDIUM/HIGH — non-deterministic garbage after context churn. Verified on Strix Halo (NPU2, XRT 2.21.75).
Running several different xclbins in one process (each op compiling its own
AIEContext→hw_context) degrades execution: after the LRU cache evicts entries, later kernels return garbage while the ERT state still reportsERT_CMD_STATE_COMPLETED. Repro: compile+run 4+ different GEMM/AXPY ops sequentially in one Python process — the first op is exact, later ones produce wrong values; each op alone in a fresh process is exact.CachedXRTRuntimehas an npu2 single-entry_evict()path (the npu1 path has a documented "full drain" workaround for the same class of problem). The npu2 eviction leaves the device in a state where subsequent dispatches execute incorrectly. Suspect stale instruction/context state after eviction; needs a driver-level repro (possibly tied to the group_id binding issue).Workaround used for measurements: one op per process.