diff --git a/level_zero/core/test/unit_tests/experimental/test_graph.cpp b/level_zero/core/test/unit_tests/experimental/test_graph.cpp index 1a8d7a63ad..1e83e1c90c 100644 --- a/level_zero/core/test/unit_tests/experimental/test_graph.cpp +++ b/level_zero/core/test/unit_tests/experimental/test_graph.cpp @@ -1026,7 +1026,8 @@ TEST_F(GraphTestInstantiationTest, WhenInstantiatingGraphThenBakeCommandsIntoCom EXPECT_EQ(ZE_RESULT_SUCCESS, zeCommandListEndGraphCaptureExp(immCmdListHandle, &srcGraphHandle, nullptr)); ctx.cmdListsToReturn.push_back(new Mock()); - ExecutableGraph execGraph; + MockExecutableGraph execGraph; + EXPECT_TRUE(execGraph.usePatchingPreamble); auto *graphHwCommands = ctx.cmdListsToReturn[0]; EXPECT_EQ(0U, graphHwCommands->appendBarrierCalled); @@ -1082,6 +1083,16 @@ TEST_F(GraphTestInstantiationTest, WhenInstantiatingGraphThenBakeCommandsIntoCom EXPECT_EQ(2U, graphHwCommands->appendLaunchKernelWithParametersCalled); // +1 for zeCommandListAppendLaunchKernelWithArguments } +TEST_F(GraphTestInstantiationTest, GivenGraphPatchPreambleDebugFlagWhenInstantiatingGraphThenUseDebugSettingForPatchPreamble) { + GraphsCleanupGuard graphCleanup; + + DebugManagerStateRestore restorer; + debugManager.flags.ForceDisableGraphPatchPreamble.set(1); + + MockExecutableGraph execGraph; + EXPECT_FALSE(execGraph.usePatchingPreamble); +} + TEST_F(GraphTestInstantiationTest, givenInOrderCmdListAndRegularCbEventWhenInstantiateToGraphThenDoNotRecordExternalCbEvent) { GraphsCleanupGuard graphCleanup; diff --git a/level_zero/core/test/unit_tests/mocks/mock_graph.h b/level_zero/core/test/unit_tests/mocks/mock_graph.h index 458d2b7762..bc8cf2a636 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_graph.h +++ b/level_zero/core/test/unit_tests/mocks/mock_graph.h @@ -24,6 +24,7 @@ struct MockExecutableGraph : ExecutableGraph { using ExecutableGraph::multiEngineGraph; using ExecutableGraph::myCommandLists; using ExecutableGraph::submissionChain; + using ExecutableGraph::usePatchingPreamble; }; } // namespace ult diff --git a/level_zero/experimental/source/graph/graph.cpp b/level_zero/experimental/source/graph/graph.cpp index f8bdb1ac6c..7026de30ef 100644 --- a/level_zero/experimental/source/graph/graph.cpp +++ b/level_zero/experimental/source/graph/graph.cpp @@ -7,6 +7,7 @@ #include "level_zero/experimental/source/graph/graph.h" +#include "shared/source/debug_settings/debug_settings_manager.h" #include "shared/source/helpers/gfx_core_helper.h" #include "level_zero/core/source/cmdlist/cmdlist.h" @@ -375,6 +376,13 @@ ze_result_t Closure::i return result; } +ExecutableGraph::ExecutableGraph() { + int32_t overrideDisablePatchingPreamble = NEO::debugManager.flags.ForceDisableGraphPatchPreamble.get(); + if (overrideDisablePatchingPreamble != -1) { + this->usePatchingPreamble = (overrideDisablePatchingPreamble == 0); + } +} + ExecutableGraph::~ExecutableGraph() = default; L0::CommandList *ExecutableGraph::allocateAndAddCommandListSubmissionNode() { @@ -494,7 +502,7 @@ ze_result_t ExecutableGraph::execute(L0::CommandList *executionTarget, void *pNe auto currSignalEvent = (myLastCommandList == *cmdList) ? hSignalEvent : nullptr; ze_command_list_handle_t hCmdList = *cmdList; - executionTarget->setPatchingPreamble(true, this->multiEngineGraph); + executionTarget->setPatchingPreamble(this->usePatchingPreamble, this->multiEngineGraph); auto res = executionTarget->appendCommandLists(1, &hCmdList, currSignalEvent, numWaitEvents, phWaitEvents); executionTarget->setPatchingPreamble(false, false); if (ZE_RESULT_SUCCESS != res) { @@ -506,7 +514,7 @@ ze_result_t ExecutableGraph::execute(L0::CommandList *executionTarget, void *pNe if (L0::CommandList **cmdList = std::get_if(&this->submissionChain[submissioNodeId])) { auto currSignalEvent = (myLastCommandList == *cmdList) ? hSignalEvent : nullptr; ze_command_list_handle_t hCmdList = *cmdList; - executionTarget->setPatchingPreamble(true, this->multiEngineGraph); + executionTarget->setPatchingPreamble(this->usePatchingPreamble, this->multiEngineGraph); auto res = executionTarget->appendCommandLists(1, &hCmdList, currSignalEvent, 0, nullptr); executionTarget->setPatchingPreamble(false, false); if (ZE_RESULT_SUCCESS != res) { diff --git a/level_zero/experimental/source/graph/graph.h b/level_zero/experimental/source/graph/graph.h index b3f8331913..b6e21543e4 100644 --- a/level_zero/experimental/source/graph/graph.h +++ b/level_zero/experimental/source/graph/graph.h @@ -251,8 +251,7 @@ struct GraphInstatiateSettings { }; struct ExecutableGraph : _ze_executable_graph_handle_t { - ExecutableGraph() { - } + ExecutableGraph(); ze_result_t instantiateFrom(Graph &graph, const GraphInstatiateSettings &settings); ze_result_t instantiateFrom(Graph &graph) { @@ -297,6 +296,7 @@ struct ExecutableGraph : _ze_executable_graph_handle_t { GraphSubmissionChain submissionChain; bool multiEngineGraph = false; + bool usePatchingPreamble = true; }; constexpr size_t maxVariantSize = 2 * 64; diff --git a/shared/source/debug_settings/debug_variables_base.inl b/shared/source/debug_settings/debug_variables_base.inl index 4cbe7c80c7..2c16ed7575 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -320,6 +320,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideCopyOffloadMode, -1, "-1: default, 0: di DECLARE_DEBUG_VARIABLE(int32_t, UseSingleListForTemporaryAllocations, -1, "-1: default, 0: disabled, 0: enabled. If enabled, use single list, instead of per CSR for tracking temporary allocations") DECLARE_DEBUG_VARIABLE(int32_t, OverrideMaxMemAllocSizeMb, -1, "-1: default, >=0 override reported max mem alloc size in MB") DECLARE_DEBUG_VARIABLE(int32_t, DetectIncorrectPointersOnSetArgCalls, -1, "-1: default do not detect, 0: do not detect, 1: detect incorrect pointers and return error") +DECLARE_DEBUG_VARIABLE(int32_t, ForceDisableGraphPatchPreamble, -1, "-1: default, 0: enable patch preamble, 1: disable graph patch preamble. If disabled, do not patch preamble graph internal command lists") /*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/test/common/test_files/igdrcl.config b/shared/test/common/test_files/igdrcl.config index d3858d8e44..71104b4f94 100644 --- a/shared/test/common/test_files/igdrcl.config +++ b/shared/test/common/test_files/igdrcl.config @@ -207,6 +207,7 @@ ReturnRawGpuTimestamps = 0 EnableDeviceBasedTimestamps = 1 MaxHwThreadsPercent = 0 MinHwThreadsUnoccupied = 0 +ForceDisableGraphPatchPreamble = -1 LimitBlitterMaxWidth = -1 LimitBlitterMaxHeight = -1 LimitBlitterMaxSetWidth = -1