From 8074560e8a66ed1b221b867c443bd577de66555f Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Fri, 12 Sep 2025 14:38:05 +0000 Subject: [PATCH] fix: return 0 as PARTITION MAX SUBDEVICES in expose single device mode Related-To: NEO-16116 Signed-off-by: Mateusz Hoppe --- opencl/source/cl_device/cl_device_caps.cpp | 4 +++- .../api/cl_create_sub_devices_tests.inl | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/opencl/source/cl_device/cl_device_caps.cpp b/opencl/source/cl_device/cl_device_caps.cpp index 88a26deca9..521d3ad04c 100644 --- a/opencl/source/cl_device/cl_device_caps.cpp +++ b/opencl/source/cl_device/cl_device_caps.cpp @@ -222,7 +222,9 @@ void ClDevice::initializeCaps() { deviceInfo.deviceAvailable = CL_TRUE; deviceInfo.compilerAvailable = CL_TRUE; deviceInfo.parentDevice = nullptr; - deviceInfo.partitionMaxSubDevices = device.getNumSubDevices(); + if (!rootDeviceEnvironment.isExposeSingleDeviceMode()) { + deviceInfo.partitionMaxSubDevices = device.getNumSubDevices(); + } if (deviceInfo.partitionMaxSubDevices > 0) { deviceInfo.partitionProperties[0] = CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN; deviceInfo.partitionProperties[1] = 0; diff --git a/opencl/test/unit_test/api/cl_create_sub_devices_tests.inl b/opencl/test/unit_test/api/cl_create_sub_devices_tests.inl index 0e65a53f06..a4444d20ff 100644 --- a/opencl/test/unit_test/api/cl_create_sub_devices_tests.inl +++ b/opencl/test/unit_test/api/cl_create_sub_devices_tests.inl @@ -11,6 +11,7 @@ #include "shared/test/common/test_macros/test.h" #include "opencl/source/api/api.h" +#include "opencl/source/cl_device/cl_device_get_cap.inl" #include @@ -175,6 +176,26 @@ TEST_F(ClCreateSubDevicesTests, GivenExposeSingleDeviceModeWhenCreatingSubDevice EXPECT_EQ(CL_DEVICE_PARTITION_FAILED, retVal); } +TEST_F(ClCreateSubDevicesTests, GivenExposeSingleDeviceModeWhenQueryingDeviceCapsThenPartitionMaxSubdevicesReturnsZero) { + debugManager.flags.CreateMultipleSubDevices.set(2); + mockDeviceCreateSingleDeviceBackup = false; + + auto executionEnvironment = MockDevice::prepareExecutionEnvironment(defaultHwInfo.get(), 0); + for (auto rootDeviceIndex = 0u; rootDeviceIndex < executionEnvironment->rootDeviceEnvironments.size(); rootDeviceIndex++) { + executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->setExposeSingleDeviceMode(true); + } + + device = std::make_unique(NEO::MockDevice::createWithExecutionEnvironment(defaultHwInfo.get(), executionEnvironment, 0)); + size_t size = sizeof(uint32_t); + const void *cap = nullptr; + device->getCap(cap, size, size); + + auto *partitionMaxSubDevices = reinterpret_cast(cap); + + EXPECT_EQ(0u, *partitionMaxSubDevices); + EXPECT_EQ(0u, device->getDeviceInfo().partitionMaxSubDevices); +} + TEST_F(ClCreateSubDevicesTests, GivenExposeSingleDeviceModeAndFlatHierarchyWhenCreatingSubDevicesThenErrorIsReturned) { std::unordered_map mockableEnvs = {{"ZE_FLAT_DEVICE_HIERARCHY", "FLAT"}}; VariableBackup *> mockableEnvValuesBackup(&IoFunctions::mockableEnvValues, &mockableEnvs);