diff --git a/runtime/built_ins/built_ins_storage.cpp b/runtime/built_ins/built_ins_storage.cpp index 7444df954b..589c4c30f0 100644 --- a/runtime/built_ins/built_ins_storage.cpp +++ b/runtime/built_ins/built_ins_storage.cpp @@ -23,6 +23,7 @@ #include #include "runtime/built_ins/built_ins.h" #include "runtime/built_ins/builtins_dispatch_builder.h" +#include "runtime/os_interface/debug_settings_manager.h" #include "os_inc.h" namespace OCLRT { @@ -156,8 +157,13 @@ BuiltinCode BuiltinsLib::getBuiltinCode(EBuiltInOps builtin, BuiltinCode::ECodeT BuiltinResourceT bc; BuiltinCode::ECodeType usedCodetType = BuiltinCode::ECodeType::INVALID; + if (requestedCodeType == BuiltinCode::ECodeType::Any) { - for (uint32_t codeType = static_cast(BuiltinCode::ECodeType::Binary), e = static_cast(BuiltinCode::ECodeType::COUNT); + uint32_t codeType = static_cast(BuiltinCode::ECodeType::Binary); + if (DebugManager.flags.RebuildPrecompiledKernels.get()) { + codeType = static_cast(BuiltinCode::ECodeType::Source); + } + for (uint32_t e = static_cast(BuiltinCode::ECodeType::COUNT); codeType != e; ++codeType) { bc = getBuiltinResource(builtin, static_cast(codeType), device); if (bc.size() > 0) { diff --git a/runtime/os_interface/DebugVariables.inl b/runtime/os_interface/DebugVariables.inl index 4e58e4a3f2..e4ad3d318c 100644 --- a/runtime/os_interface/DebugVariables.inl +++ b/runtime/os_interface/DebugVariables.inl @@ -22,6 +22,7 @@ /*SIMULATION FLAGS*/ DECLARE_DEBUG_VARIABLE(std::string, TbxServer, std::string("127.0.0.1"), "TCP-IP address of TBX server") DECLARE_DEBUG_VARIABLE(std::string, ProductFamilyOverride, std::string("unk"), "Specify product for use in AUB/TBX") +DECLARE_DEBUG_VARIABLE(std::string, ForceCompilerUsePlatform, std::string("unk"), "Specify product for use in compiler interface") DECLARE_DEBUG_VARIABLE(std::string, AUBDumpFilterKernelName, std::string("unk"), "Name of kernel to AUB capture") DECLARE_DEBUG_VARIABLE(int32_t, AUBDumpSubCaptureMode, 0, "AUB dump subcapture mode (off, toggle, filter)") DECLARE_DEBUG_VARIABLE(int32_t, AUBDumpFilterKernelStartIdx, 0, "Start index of kernel to AUB capture") @@ -44,6 +45,7 @@ DECLARE_DEBUG_VARIABLE(bool, DoCpuCopyOnWriteBuffer, false, "triggers CPU copy p DECLARE_DEBUG_VARIABLE(bool, DisableResourceRecycling, false, "when set to true disables resource recycling optimization") DECLARE_DEBUG_VARIABLE(bool, ForceDispatchScheduler, false, "dispatches scheduler kernel instead of kernel enqueued") DECLARE_DEBUG_VARIABLE(bool, TrackParentEvents, false, "events track their parents") +DECLARE_DEBUG_VARIABLE(bool, RebuildPrecompiledKernels, false, "forces driver to recompile precompiled kernels from sources") /*LOGGING FLAGS*/ DECLARE_DEBUG_VARIABLE(bool, PrintDebugMessages, false, "when enabled, some debug messages will be propagated to console") DECLARE_DEBUG_VARIABLE(bool, DumpKernels, false, "Enables dumping kernels' program source code to text files and program from binary to bin file") @@ -100,6 +102,5 @@ DECLARE_DEBUG_VARIABLE(int32_t, ForceOCLVersion, 0, "Force specific OpenCL API v DECLARE_DEBUG_VARIABLE(int32_t, ForcePreemptionMode, -1, "Keep this variable in sync with PreemptionMode enum. -1 - devices default mode, 1 - disable, 2 - midBatch, 3 - threadGroup, 4 - midThread") DECLARE_DEBUG_VARIABLE(int32_t, NodeOrdinal, -1, "-1: default do not override, 0: ENGINE_RCS") DECLARE_DEBUG_VARIABLE(int32_t, OverrideThreadArbitrationPolicy, -1, "-1 (dont override) or any valid config (0: Age Based, 1: Round Robin)") -DECLARE_DEBUG_VARIABLE(bool, UseMaxSimdSizeToDeduceMaxWorkgroupSize, false, "With this flag on, max workgroup size is deduced using SIMD32 instead of SIMD8, this causes the max wkg size to be 4 times bigger") DECLARE_DEBUG_VARIABLE(int32_t, OverrideAubDeviceId, -1, "-1 dont override, any other: use this value for AUB generation device id") -DECLARE_DEBUG_VARIABLE(std::string, ForceCompilerUsePlatform, std::string("unk"), "Specify product for use in compiler interface") \ No newline at end of file +DECLARE_DEBUG_VARIABLE(bool, UseMaxSimdSizeToDeduceMaxWorkgroupSize, false, "With this flag on, max workgroup size is deduced using SIMD32 instead of SIMD8, this causes the max wkg size to be 4 times bigger") diff --git a/unit_tests/built_ins/built_in_tests.cpp b/unit_tests/built_ins/built_in_tests.cpp index e9e37256a5..0a741963ab 100644 --- a/unit_tests/built_ins/built_in_tests.cpp +++ b/unit_tests/built_ins/built_in_tests.cpp @@ -29,13 +29,15 @@ #include "runtime/helpers/hash.h" #include "runtime/helpers/string.h" #include "runtime/kernel/kernel.h" +#include "runtime/os_interface/debug_settings_manager.h" #include "runtime/platform/platform.h" -#include "unit_tests/global_environment.h" #include "unit_tests/fixtures/built_in_fixture.h" #include "unit_tests/fixtures/device_fixture.h" #include "unit_tests/fixtures/context_fixture.h" #include "unit_tests/fixtures/image_fixture.h" #include "unit_tests/fixtures/run_kernel_fixture.h" +#include "unit_tests/global_environment.h" +#include "unit_tests/helpers/debug_manager_state_restore.h" #include "unit_tests/mocks/mock_buffer.h" #include "unit_tests/mocks/mock_builtins.h" #include "unit_tests/mocks/mock_compilers.h" @@ -1505,3 +1507,23 @@ TEST_F(BuiltInTests, givenSipKernelWhenItIsCreatedThenItHasGraphicsAllocationFor auto sipAllocation = sipKern.getSipAllocation(); EXPECT_NE(nullptr, sipAllocation); } + +TEST_F(BuiltInTests, givenDebugFlagForceUseSourceWhenArgIsBinaryThenReturnBuiltinCodeBinary) { + DebugManagerStateRestore dbgRestore; + DebugManager.flags.RebuildPrecompiledKernels.set(true); + auto builtinsLib = std::unique_ptr(new BuiltinsLib()); + BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice); + EXPECT_EQ(BuiltinCode::ECodeType::Binary, code.type); + EXPECT_NE(0u, code.resource.size()); + EXPECT_EQ(pDevice, code.targetDevice); +} + +TEST_F(BuiltInTests, givenDebugFlagForceUseSourceWhenArgIsAnyThenReturnBuiltinCodeSource) { + DebugManagerStateRestore dbgRestore; + DebugManager.flags.RebuildPrecompiledKernels.set(true); + auto builtinsLib = std::unique_ptr(new BuiltinsLib()); + BuiltinCode code = builtinsLib->getBuiltinCode(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Any, *pDevice); + EXPECT_EQ(BuiltinCode::ECodeType::Source, code.type); + EXPECT_NE(0u, code.resource.size()); + EXPECT_EQ(pDevice, code.targetDevice); +} diff --git a/unit_tests/test_files/igdrcl.config b/unit_tests/test_files/igdrcl.config index 2b1d9cc956..726801da37 100644 --- a/unit_tests/test_files/igdrcl.config +++ b/unit_tests/test_files/igdrcl.config @@ -73,4 +73,5 @@ AUBDumpSubCaptureMode = 0 AUBDumpToggleCaptureOnOff = 0 AUBDumpFilterKernelName = unk AUBDumpFilterKernelStartIdx = 0 -AUBDumpFilterKernelEndIdx = -1 \ No newline at end of file +AUBDumpFilterKernelEndIdx = -1 +RebuildPrecompiledKernels = false \ No newline at end of file