oneapi-src / level-zero

oneAPI Level Zero Specification Headers and Loader
https://spec.oneapi.com/versions/latest/elements/l0/source/index.html
MIT License
211 stars 90 forks source link

How to detect iGPU free memory #166

Open zhewang1-intc opened 2 months ago

zhewang1-intc commented 2 months ago

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?

avimanyu786 commented 1 month ago

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:

  1. https://github.com/intel/compute-runtime/issues/750
  2. https://github.com/IntelPython/dpctl/issues/1761