From 4269b3d4bcef9ae191bf27cb769d08f6766ff37b Mon Sep 17 00:00:00 2001 From: Igor Chorazewicz Date: Thu, 9 Jan 2025 18:20:11 +0000 Subject: [PATCH] [L0 v2] implement urKernelGetSuggestedLocalWorkSize --- source/adapters/level_zero/v2/api.cpp | 10 ---------- source/adapters/level_zero/v2/kernel.cpp | 25 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/source/adapters/level_zero/v2/api.cpp b/source/adapters/level_zero/v2/api.cpp index 6142c3d8a4..33ff023bb8 100644 --- a/source/adapters/level_zero/v2/api.cpp +++ b/source/adapters/level_zero/v2/api.cpp @@ -103,16 +103,6 @@ ur_result_t urKernelSetSpecializationConstants( return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; } -ur_result_t urKernelGetSuggestedLocalWorkSize(ur_kernel_handle_t hKernel, - ur_queue_handle_t hQueue, - uint32_t numWorkDim, - const size_t *pGlobalWorkOffset, - const size_t *pGlobalWorkSize, - size_t *pSuggestedLocalWorkSize) { - logger::error("{} function not implemented!", __FUNCTION__); - return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; -} - ur_result_t urEventSetCallback(ur_event_handle_t hEvent, ur_execution_info_t execStatus, ur_event_callback_t pfnNotify, void *pUserData) { diff --git a/source/adapters/level_zero/v2/kernel.cpp b/source/adapters/level_zero/v2/kernel.cpp index bd70e5261f..9313c56395 100644 --- a/source/adapters/level_zero/v2/kernel.cpp +++ b/source/adapters/level_zero/v2/kernel.cpp @@ -13,6 +13,7 @@ #include "context.hpp" #include "kernel.hpp" #include "memory.hpp" +#include "queue_api.hpp" #include "../device.hpp" #include "../helpers/kernel_helpers.hpp" @@ -624,4 +625,28 @@ ur_result_t urKernelGetInfo(ur_kernel_handle_t hKernel, } catch (...) { return exceptionToResult(std::current_exception()); } + +ur_result_t urKernelGetSuggestedLocalWorkSize( + ur_kernel_handle_t hKernel, ur_queue_handle_t hQueue, uint32_t workDim, + [[maybe_unused]] const size_t *pGlobalWorkOffset, + const size_t *pGlobalWorkSize, size_t *pSuggestedLocalWorkSize) { + UR_ASSERT(workDim > 0, UR_RESULT_ERROR_INVALID_WORK_DIMENSION); + UR_ASSERT(workDim < 4, UR_RESULT_ERROR_INVALID_WORK_DIMENSION); + UR_ASSERT(pSuggestedLocalWorkSize != nullptr, + UR_RESULT_ERROR_INVALID_NULL_POINTER); + + uint32_t localWorkSize[3]; + size_t globalWorkSize3D[3]{1, 1, 1}; + std::copy(pGlobalWorkSize, pGlobalWorkSize + workDim, globalWorkSize3D); + + ur_device_handle_t hDevice; + UR_CALL(hQueue->queueGetInfo(UR_QUEUE_INFO_DEVICE, sizeof(hDevice), + reinterpret_cast(&hDevice), nullptr)); + + UR_CALL(getSuggestedLocalWorkSize(hDevice, hKernel->getZeHandle(hDevice), + globalWorkSize3D, localWorkSize)); + + std::copy(localWorkSize, localWorkSize + workDim, pSuggestedLocalWorkSize); + return UR_RESULT_SUCCESS; +} } // namespace ur::level_zero