From 1a28c2a15472c37998f1c586bda0de54f3464bfb Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Wed, 24 Aug 2022 11:10:22 +0000 Subject: [PATCH] Add threads count queries Signed-off-by: Dunajski, Bartosz --- opencl/extensions/public/cl_ext_private.h | 4 ++++ opencl/source/cl_device/cl_device_info.cpp | 6 +++-- opencl/source/helpers/CMakeLists.txt | 2 -- opencl/source/helpers/cl_device_helpers.cpp | 12 ---------- opencl/source/helpers/cl_device_helpers.h | 22 ------------------- .../helpers/cl_hw_helper_xehp_and_later.inl | 1 - opencl/source/kernel/CMakeLists.txt | 1 - .../kernel/get_additional_kernel_info.cpp | 16 -------------- opencl/source/kernel/kernel.cpp | 6 +++-- opencl/source/kernel/kernel.h | 2 -- opencl/test/unit_test/device/device_tests.cpp | 18 +++++++++++++++ opencl/test/unit_test/kernel/kernel_tests.cpp | 22 +++++++++++++++++-- 12 files changed, 50 insertions(+), 62 deletions(-) delete mode 100644 opencl/source/helpers/cl_device_helpers.cpp delete mode 100644 opencl/source/helpers/cl_device_helpers.h delete mode 100644 opencl/source/kernel/get_additional_kernel_info.cpp diff --git a/opencl/extensions/public/cl_ext_private.h b/opencl/extensions/public/cl_ext_private.h index d03b63994b..a509e0317f 100644 --- a/opencl/extensions/public/cl_ext_private.h +++ b/opencl/extensions/public/cl_ext_private.h @@ -338,3 +338,7 @@ typedef cl_bitfield cl_command_queue_mdapi_properties_intel; #if !defined(cl_khr_external_memory_dma_buf) #define CL_EXTERNAL_MEMORY_HANDLE_DMA_BUF_KHR 0x2067 #endif + +// cl_intel_variable_eu_thread_count +#define CL_DEVICE_EU_THREAD_COUNTS_INTEL 0x1000A // placeholder +#define CL_KERNEL_EU_THREAD_COUNT_INTEL 0x1000B // placeholder \ No newline at end of file diff --git a/opencl/source/cl_device/cl_device_info.cpp b/opencl/source/cl_device/cl_device_info.cpp index 08af9102ef..620430af6c 100644 --- a/opencl/source/cl_device/cl_device_info.cpp +++ b/opencl/source/cl_device/cl_device_info.cpp @@ -17,7 +17,6 @@ #include "opencl/source/cl_device/cl_device_get_cap.inl" #include "opencl/source/cl_device/cl_device_info_map.h" #include "opencl/source/cl_device/cl_device_vector.h" -#include "opencl/source/helpers/cl_device_helpers.h" #include "opencl/source/helpers/cl_hw_helper.h" #include "opencl/source/helpers/get_info_status_mapper.h" #include "opencl/source/platform/platform.h" @@ -325,12 +324,15 @@ cl_int ClDevice::getDeviceInfo(cl_device_info paramName, src = ¶m.uint; retSize = srcSize = sizeof(cl_uint); break; + case CL_DEVICE_EU_THREAD_COUNTS_INTEL: + src = getSharedDeviceInfo().threadsPerEUConfigs.begin(); + retSize = srcSize = (getSharedDeviceInfo().threadsPerEUConfigs.size() * sizeof(uint32_t)); + break; default: if (getDeviceInfoForImage(paramName, src, srcSize, retSize) && !getSharedDeviceInfo().imageSupport) { src = &value; break; } - ClDeviceHelper::getExtraDeviceInfo(*this, paramName, param, src, srcSize, retSize); } auto getInfoStatus = GetInfo::getInfo(paramValue, paramValueSize, src, srcSize); diff --git a/opencl/source/helpers/CMakeLists.txt b/opencl/source/helpers/CMakeLists.txt index d1a8afb912..cf4f70a413 100644 --- a/opencl/source/helpers/CMakeLists.txt +++ b/opencl/source/helpers/CMakeLists.txt @@ -9,8 +9,6 @@ set(RUNTIME_SRCS_HELPERS_BASE ${CMAKE_CURRENT_SOURCE_DIR}/base_object.cpp ${CMAKE_CURRENT_SOURCE_DIR}/base_object.h ${CMAKE_CURRENT_SOURCE_DIR}/cl_blit_properties.h - ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}cl_device_helpers.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/cl_device_helpers.h ${CMAKE_CURRENT_SOURCE_DIR}/cl_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/cl_hw_helper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/cl_hw_helper.h diff --git a/opencl/source/helpers/cl_device_helpers.cpp b/opencl/source/helpers/cl_device_helpers.cpp deleted file mode 100644 index 7fa8a265d0..0000000000 --- a/opencl/source/helpers/cl_device_helpers.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright (C) 2020-2022 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "opencl/source/helpers/cl_device_helpers.h" - -namespace NEO { -void ClDeviceHelper::getExtraDeviceInfo(const ClDevice &clDevice, cl_device_info paramName, ClDeviceInfoParam ¶m, const void *&src, size_t &size, size_t &retSize) {} -} // namespace NEO diff --git a/opencl/source/helpers/cl_device_helpers.h b/opencl/source/helpers/cl_device_helpers.h deleted file mode 100644 index 44785c5bc6..0000000000 --- a/opencl/source/helpers/cl_device_helpers.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2020-2022 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#pragma once -#include "opencl/extensions/public/cl_ext_private.h" - -#include "CL/cl.h" - -#include -namespace NEO { -class ClDevice; -struct ClDeviceInfoParam; -struct HardwareInfo; - -namespace ClDeviceHelper { -void getExtraDeviceInfo(const ClDevice &clDevice, cl_device_info paramName, ClDeviceInfoParam ¶m, const void *&src, size_t &size, size_t &retSize); -}; // namespace ClDeviceHelper -} // namespace NEO diff --git a/opencl/source/helpers/cl_hw_helper_xehp_and_later.inl b/opencl/source/helpers/cl_hw_helper_xehp_and_later.inl index b8b9c456ea..e22aee7aeb 100644 --- a/opencl/source/helpers/cl_hw_helper_xehp_and_later.inl +++ b/opencl/source/helpers/cl_hw_helper_xehp_and_later.inl @@ -7,7 +7,6 @@ #include "shared/source/os_interface/hw_info_config.h" -#include "opencl/source/helpers/cl_device_helpers.h" #include "opencl/source/helpers/cl_hw_helper.h" namespace NEO { diff --git a/opencl/source/kernel/CMakeLists.txt b/opencl/source/kernel/CMakeLists.txt index 909f72ea89..f16afb30ff 100644 --- a/opencl/source/kernel/CMakeLists.txt +++ b/opencl/source/kernel/CMakeLists.txt @@ -6,7 +6,6 @@ set(RUNTIME_SRCS_KERNEL ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}get_additional_kernel_info.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_transformer.cpp ${CMAKE_CURRENT_SOURCE_DIR}/image_transformer.h ${CMAKE_CURRENT_SOURCE_DIR}/kernel.cpp diff --git a/opencl/source/kernel/get_additional_kernel_info.cpp b/opencl/source/kernel/get_additional_kernel_info.cpp deleted file mode 100644 index 342f139ca1..0000000000 --- a/opencl/source/kernel/get_additional_kernel_info.cpp +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (C) 2019-2021 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "opencl/source/kernel/kernel.h" - -namespace NEO { -void Kernel::getAdditionalInfo(cl_kernel_info paramName, const void *¶mValue, size_t ¶mValueSizeRet) const { -} - -void Kernel::getAdditionalWorkGroupInfo(cl_kernel_work_group_info paramName, const void *¶mValue, size_t ¶mValueSizeRet) const { -} -} // namespace NEO diff --git a/opencl/source/kernel/kernel.cpp b/opencl/source/kernel/kernel.cpp index 4fb1a705a8..6a2ea7a92d 100644 --- a/opencl/source/kernel/kernel.cpp +++ b/opencl/source/kernel/kernel.cpp @@ -449,7 +449,6 @@ cl_int Kernel::getInfo(cl_kernel_info paramName, size_t paramValueSize, srcSize = sizeof(nonCannonizedGpuAddress); break; default: - getAdditionalInfo(paramName, pSrc, srcSize); break; } @@ -583,8 +582,11 @@ cl_int Kernel::getWorkGroupInfo(cl_kernel_work_group_info paramName, srcSize = sizeof(privateMemSize); pSrc = &privateMemSize; break; + case CL_KERNEL_EU_THREAD_COUNT_INTEL: + srcSize = sizeof(cl_uint); + pSrc = &this->getKernelInfo().kernelDescriptor.kernelAttributes.numThreadsRequired; + break; default: - getAdditionalWorkGroupInfo(paramName, pSrc, srcSize); break; } diff --git a/opencl/source/kernel/kernel.h b/opencl/source/kernel/kernel.h index 40739d853a..a6157020c9 100644 --- a/opencl/source/kernel/kernel.h +++ b/opencl/source/kernel/kernel.h @@ -156,8 +156,6 @@ class Kernel : public ReferenceTrackedObject { cl_int getInfo(cl_kernel_info paramName, size_t paramValueSize, void *paramValue, size_t *paramValueSizeRet) const; - void getAdditionalInfo(cl_kernel_info paramName, const void *¶mValue, size_t ¶mValueSizeRet) const; - void getAdditionalWorkGroupInfo(cl_kernel_work_group_info paramName, const void *¶mValue, size_t ¶mValueSizeRet) const; cl_int getArgInfo(cl_uint argIndx, cl_kernel_arg_info paramName, size_t paramValueSize, void *paramValue, size_t *paramValueSizeRet) const; diff --git a/opencl/test/unit_test/device/device_tests.cpp b/opencl/test/unit_test/device/device_tests.cpp index c5ef320d9c..83219146b8 100644 --- a/opencl/test/unit_test/device/device_tests.cpp +++ b/opencl/test/unit_test/device/device_tests.cpp @@ -178,6 +178,24 @@ HWTEST_F(DeviceTest, WhenDeviceIsCreatedThenActualEngineTypeIsSameAsDefault) { EXPECT_EQ(defaultCounter, 1); } +TEST_F(DeviceTest, givenDeviceWithThreadsPerEUConfigsWhenQueryingEuThreadCountsThenConfigsAreReturned) { + cl_int retVal = CL_SUCCESS; + auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(NEO::defaultHwInfo.get(), 0)); + const StackVec configs = {123U, 456U}; + device->sharedDeviceInfo.threadsPerEUConfigs = configs; + + size_t paramRetSize; + retVal = device->getDeviceInfo(CL_DEVICE_EU_THREAD_COUNTS_INTEL, 0, nullptr, ¶mRetSize); + EXPECT_EQ(CL_SUCCESS, retVal); + EXPECT_EQ(configs.size() * sizeof(cl_uint), paramRetSize); + + auto euThreadCounts = std::make_unique(paramRetSize / sizeof(cl_uint)); + retVal = device->getDeviceInfo(CL_DEVICE_EU_THREAD_COUNTS_INTEL, paramRetSize, euThreadCounts.get(), nullptr); + EXPECT_EQ(CL_SUCCESS, retVal); + EXPECT_EQ(123U, euThreadCounts[0]); + EXPECT_EQ(456U, euThreadCounts[1]); +} + HWTEST_F(DeviceTest, givenNoHwCsrTypeAndModifiedDefaultEngineIndexWhenIsSimulationIsCalledThenTrueIsReturned) { EXPECT_FALSE(pDevice->isSimulation()); auto csr = TbxCommandStreamReceiver::create("", false, *pDevice->executionEnvironment, 0, 1); diff --git a/opencl/test/unit_test/kernel/kernel_tests.cpp b/opencl/test/unit_test/kernel/kernel_tests.cpp index acad5099f7..9848210aa7 100644 --- a/opencl/test/unit_test/kernel/kernel_tests.cpp +++ b/opencl/test/unit_test/kernel/kernel_tests.cpp @@ -2028,7 +2028,7 @@ TEST(KernelImageDetectionTests, givenKernelWithNoImagesWhenItIsAskedIfItHasImage HWTEST_F(KernelResidencyTest, WhenMakingArgsResidentThenImageFromImageCheckIsCorrect) { ASSERT_NE(nullptr, pDevice); - //create NV12 image + // create NV12 image cl_mem_flags flags = CL_MEM_READ_ONLY | CL_MEM_HOST_NO_ACCESS; cl_image_format imageFormat; imageFormat.image_channel_data_type = CL_UNORM_INT8; @@ -2049,7 +2049,7 @@ HWTEST_F(KernelResidencyTest, WhenMakingArgsResidentThenImageFromImageCheckIsCor flags, 0, surfaceFormat, &imageDesc, nullptr, retVal)); EXPECT_EQ(imageNV12->getMediaPlaneType(), 0u); - //create Y plane + // create Y plane imageFormat.image_channel_order = CL_R; flags = CL_MEM_READ_ONLY; surfaceFormat = Image::getSurfaceFormatFromTable( @@ -3282,3 +3282,21 @@ TEST_F(KernelTests, GivenCorrectAllocationTypeThenFunctionCheckingSystemMemoryRe } } } + +TEST(KernelTest, givenKernelWithNumThreadsRequiredPatchTokenWhenQueryingEuThreadCountThenEuThreadCountIsReturned) { + cl_int retVal = CL_SUCCESS; + KernelInfo kernelInfo = {}; + + kernelInfo.kernelDescriptor.kernelAttributes.numThreadsRequired = 123U; + auto rootDeviceIndex = 0u; + auto device = std::make_unique(MockDevice::createWithNewExecutionEnvironment(NEO::defaultHwInfo.get(), rootDeviceIndex)); + auto program = std::make_unique(toClDeviceVector(*device)); + MockKernel kernel(program.get(), kernelInfo, *device); + + cl_uint euThreadCount; + size_t paramRetSize; + retVal = kernel.getWorkGroupInfo(CL_KERNEL_EU_THREAD_COUNT_INTEL, sizeof(cl_uint), &euThreadCount, ¶mRetSize); + EXPECT_EQ(CL_SUCCESS, retVal); + EXPECT_EQ(sizeof(cl_uint), paramRetSize); + EXPECT_EQ(123U, euThreadCount); +} \ No newline at end of file