diff options
author | Xavier Hallade <xavier.hallade@intel.com> | 2022-07-27 10:38:19 +0300 |
---|---|---|
committer | Xavier Hallade <xavier.hallade@intel.com> | 2022-07-27 10:45:33 +0300 |
commit | d706d0460c5721e2b07f18ab6354754267628130 (patch) | |
tree | db042aabbfb3a74a3d6f20e93ebffc854a854fa1 /intern/cycles/kernel | |
parent | 38e270ae30d97a171e72af0359d34d19a647489d (diff) |
Cycles oneAPI: simplify num_concurrent_states selection
The number of Execution Units and resident "threads" (simd width * threads
per EUs) are now exposed and used to select the number of states using
a simplified heuristic.
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r-- | intern/cycles/kernel/device/oneapi/dll_interface_template.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/device/oneapi/kernel.cpp | 23 |
2 files changed, 21 insertions, 5 deletions
diff --git a/intern/cycles/kernel/device/oneapi/dll_interface_template.h b/intern/cycles/kernel/device/oneapi/dll_interface_template.h index 662068c0fed..5dd0d4203a4 100644 --- a/intern/cycles/kernel/device/oneapi/dll_interface_template.h +++ b/intern/cycles/kernel/device/oneapi/dll_interface_template.h @@ -6,7 +6,8 @@ DLL_INTERFACE_CALL(oneapi_device_capabilities, char *) DLL_INTERFACE_CALL(oneapi_free, void, void *) DLL_INTERFACE_CALL(oneapi_get_memcapacity, size_t, SyclQueue *queue) -DLL_INTERFACE_CALL(oneapi_get_compute_units_amount, size_t, SyclQueue *queue) +DLL_INTERFACE_CALL(oneapi_get_num_multiprocessors, int, SyclQueue *queue) +DLL_INTERFACE_CALL(oneapi_get_max_num_threads_per_multiprocessor, int, SyclQueue *queue) DLL_INTERFACE_CALL(oneapi_iterate_devices, void, OneAPIDeviceIteratorCallback cb, void *user_ptr) DLL_INTERFACE_CALL(oneapi_set_error_cb, void, OneAPIErrorCallback, void *user_ptr) diff --git a/intern/cycles/kernel/device/oneapi/kernel.cpp b/intern/cycles/kernel/device/oneapi/kernel.cpp index 300e201600c..7e90c553c44 100644 --- a/intern/cycles/kernel/device/oneapi/kernel.cpp +++ b/intern/cycles/kernel/device/oneapi/kernel.cpp @@ -904,11 +904,26 @@ size_t oneapi_get_memcapacity(SyclQueue *queue) .get_info<sycl::info::device::global_mem_size>(); } -size_t oneapi_get_compute_units_amount(SyclQueue *queue) +int oneapi_get_num_multiprocessors(SyclQueue *queue) { - return reinterpret_cast<sycl::queue *>(queue) - ->get_device() - .get_info<sycl::info::device::max_compute_units>(); + const sycl::device &device = reinterpret_cast<sycl::queue *>(queue)->get_device(); + if (device.has(sycl::aspect::ext_intel_gpu_eu_count)) { + return device.get_info<sycl::info::device::ext_intel_gpu_eu_count>(); + } + else + return 0; +} + +int oneapi_get_max_num_threads_per_multiprocessor(SyclQueue *queue) +{ + const sycl::device &device = reinterpret_cast<sycl::queue *>(queue)->get_device(); + if (device.has(sycl::aspect::ext_intel_gpu_eu_simd_width) && + device.has(sycl::aspect::ext_intel_gpu_hw_threads_per_eu)) { + return device.get_info<sycl::info::device::ext_intel_gpu_eu_simd_width>() * + device.get_info<sycl::info::device::ext_intel_gpu_hw_threads_per_eu>(); + } + else + return 0; } #endif /* WITH_ONEAPI */ |