@@ -179,6 +179,16 @@ def detect(self) -> Devices | None:
179179 dev_gpu_vram_usage = pyamdsmi .amdsmi_get_gpu_vram_usage (dev )
180180 dev_mem = dev_gpu_vram_usage .get ("vram_total" )
181181 dev_mem_used = dev_gpu_vram_usage .get ("vram_used" )
182+ # On APUs with unified memory (e.g., AMD Strix Halo), VRAM
183+ # reports only the BIOS carveout (~512 MiB); VIS_VRAM reports
184+ # the full usable system memory. Use VIS_VRAM when larger.
185+ with contextlib .suppress (pyrocmsmi .ROCMSMIError ):
186+ dev_mem_vis_vram = byte_to_mebibyte (
187+ pyrocmsmi .rsmi_dev_memory_total_get (
188+ dev_idx , pyrocmsmi .RSMI_MEM_TYPE_VIS_VRAM ,
189+ ),
190+ )
191+ dev_mem = max (dev_mem , dev_mem_vis_vram )
182192 dev_ecc_count = pyamdsmi .amdsmi_get_gpu_ecc_count (
183193 dev ,
184194 pyamdsmi .AmdSmiGpuBlock .UMC ,
@@ -189,6 +199,16 @@ def detect(self) -> Devices | None:
189199 dev_mem = byte_to_mebibyte ( # byte to MiB
190200 pyrocmsmi .rsmi_dev_memory_total_get (dev_idx ),
191201 )
202+ # On APUs with unified memory (e.g., AMD Strix Halo), VRAM
203+ # reports only the BIOS carveout (~512 MiB); VIS_VRAM reports
204+ # the full usable system memory. Use VIS_VRAM when larger.
205+ with contextlib .suppress (pyrocmsmi .ROCMSMIError ):
206+ dev_mem_vis_vram = byte_to_mebibyte (
207+ pyrocmsmi .rsmi_dev_memory_total_get (
208+ dev_idx , pyrocmsmi .RSMI_MEM_TYPE_VIS_VRAM ,
209+ ),
210+ )
211+ dev_mem = max (dev_mem , dev_mem_vis_vram )
192212 dev_mem_used = byte_to_mebibyte ( # byte to MiB
193213 pyrocmsmi .rsmi_dev_memory_usage_get (dev_idx ),
194214 )
0 commit comments