How to detect iGPU free memory
Hi, I'd like to ask how to use level-zero/sycl to detect available memory of Intel iGPUs (e.g., Intel® Iris® Xe Graphics, PCI ID: 46A0, codename: Alder Lake-P).
I found relevant APIs in level-zero, such as zesDeviceEnumMemoryModules and zesMemoryGetState. Unfortunately, when I call zesDeviceEnumMemoryModules on a system with only iGPU, the return value of pCount is 0. Therefore, I cannot get the iGPU memory information through zesMemoryGetState.
i also found how to use sycl to detect free memory in this doc, here is the code
if (dev.has(aspect::ext_intel_free_memory)) {
auto FreeMemory = dev.get_info<ext::intel::info::device::free_memory>();
}
I ran this func with set ZES_ENABLE_SYSMAN=1, but I got the free_mem size is 0.
note that these issues don't appear on Intel dGPUs. Windows Task Manager can directly show the total and used memory of iGPU. How to implement this function? Are there any code examples?
Apparently, this issue is also there on Intel ARC A770 dGPUs (though in this case, it's for used memory), although it works on Intel Data Center Max 1100 dGPUs.
References:
- https://github.com/intel/compute-runtime/issues/750
- https://github.com/IntelPython/dpctl/issues/1761
iGPUs do not have dedicated (device) memory (aka VRAM), they share system memory with CPU, so zero is correct value for device memory amount.
I think for iGPUs you could check the amount of system memory (and assume something about how much CPU side needs of it, as things would likely work badly if iGPU would use all the free memory).