diff --git a/opencl/test/unit_test/test_files/igdrcl.config b/opencl/test/unit_test/test_files/igdrcl.config index bd5b6c13c2..43080b545b 100644 --- a/opencl/test/unit_test/test_files/igdrcl.config +++ b/opencl/test/unit_test/test_files/igdrcl.config @@ -244,4 +244,5 @@ EngineInstancedSubDevices = 0 OverrideTimestampPacketSize = -1 ClDeviceGlobalMemSizeAvailablePercent = -1 DebugApiUsed = 0 -ForceHostPointerImport = -1 \ No newline at end of file +ForceHostPointerImport = -1 +OverrideMaxWorkGroupCount = -1 \ No newline at end of file diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 1a3885164f..32b9611f6e 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -100,6 +100,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, DebuggerOptDisable, -1, "-1: default from debugg DECLARE_DEBUG_VARIABLE(int32_t, DebugApiUsed, 0, "0: default L0 Debug API not used, 1: L0 Debug API used") DECLARE_DEBUG_VARIABLE(int32_t, OverrideCsrAllocationSize, -1, "-1: default, >0: use value for size of CSR allocation") DECLARE_DEBUG_VARIABLE(int32_t, OverrideTimestampPacketSize, -1, "-1: default, >0: size in bytes. 4 and 8 supported for experiments") +DECLARE_DEBUG_VARIABLE(int32_t, OverrideMaxWorkGroupCount, -1, "-1: default, >0: Max WG size") /*LOGGING FLAGS*/ DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level") diff --git a/shared/source/helpers/kernel_helpers.cpp b/shared/source/helpers/kernel_helpers.cpp index 84a42a3a50..5184fc146c 100644 --- a/shared/source/helpers/kernel_helpers.cpp +++ b/shared/source/helpers/kernel_helpers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019-2020 Intel Corporation + * Copyright (C) 2019-2021 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -7,6 +7,7 @@ #include "shared/source/helpers/kernel_helpers.h" +#include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/helpers/basic_math.h" #include "shared/source/helpers/debug_helpers.h" @@ -17,6 +18,10 @@ namespace NEO { uint32_t KernelHelper::getMaxWorkGroupCount(uint32_t simd, uint32_t availableThreadCount, uint32_t dssCount, uint32_t availableSlmSize, uint32_t usedSlmSize, uint32_t maxBarrierCount, uint32_t numberOfBarriers, uint32_t workDim, const size_t *localWorkSize) { + if (DebugManager.flags.OverrideMaxWorkGroupCount.get() != -1) { + return static_cast(DebugManager.flags.OverrideMaxWorkGroupCount.get()); + } + UNRECOVERABLE_IF((workDim == 0) || (workDim > 3)); UNRECOVERABLE_IF(localWorkSize == nullptr); diff --git a/shared/test/common/helpers/kernel_helpers_tests.cpp b/shared/test/common/helpers/kernel_helpers_tests.cpp index 2bf8bf40e7..15a2fa1f9c 100644 --- a/shared/test/common/helpers/kernel_helpers_tests.cpp +++ b/shared/test/common/helpers/kernel_helpers_tests.cpp @@ -8,6 +8,7 @@ #include "shared/source/helpers/basic_math.h" #include "shared/source/helpers/constants.h" #include "shared/source/helpers/kernel_helpers.h" +#include "shared/test/common/helpers/debug_manager_state_restore.h" #include "test.h" @@ -36,6 +37,13 @@ TEST_F(KernelHelperMaxWorkGroupsTests, GivenNoBarriersOrSlmUsedWhenCalculatingMa EXPECT_EQ(expected, getMaxWorkGroupCount()); } +TEST_F(KernelHelperMaxWorkGroupsTests, GivenDebugFlagSetWhenGetMaxWorkGroupCountCalledThenReturnCorrectValue) { + DebugManagerStateRestore restore; + DebugManager.flags.OverrideMaxWorkGroupCount.set(123); + + EXPECT_EQ(123u, getMaxWorkGroupCount()); +} + TEST_F(KernelHelperMaxWorkGroupsTests, GivenBarriersWhenCalculatingMaxWorkGroupsCountThenResultIsCalculatedWithRegardToBarriersCount) { numberOfBarriers = 16;