From 41235346f2b6adc3683a8826be16cb998fd302dc Mon Sep 17 00:00:00 2001 From: Bartosz Dunajski Date: Sat, 6 Jun 2020 13:13:22 +0200 Subject: [PATCH] Add debug flag to control MultiStorageResources support Change-Id: I8347989df2249559ca0e4cb69f7f3af3f9a5fe72 Signed-off-by: Bartosz Dunajski --- .../memory_manager/memory_manager_tests.cpp | 22 ++++++++++++++++--- .../linux/drm_memory_manager_tests.cpp | 14 +++++++++++- .../windows/wddm_memory_manager_tests.cpp | 15 ++++++++++++- .../test/unit_test/test_files/igdrcl.config | 3 ++- .../debug_settings/debug_variables_base.inl | 1 + .../source/memory_manager/memory_manager.cpp | 4 ++++ 6 files changed, 53 insertions(+), 6 deletions(-) diff --git a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp index 636a4a7d2f..c9c985fcfa 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -55,9 +55,25 @@ using namespace NEO; typedef Test MemoryAllocatorTest; -TEST(MemoryManagerTest, whenCreatingOsAgnosticMemoryManagerThenSupportsMultiStorageResourcesFlagIsSetToTrue) { - MockMemoryManager memoryManager; - EXPECT_TRUE(memoryManager.supportsMultiStorageResources); +TEST(MemoryManagerTest, givenDebugVariableWhenCreatingMemoryManagerThenSetSupportForMultiStorageResources) { + DebugManagerStateRestore restore; + + { + MockMemoryManager memoryManager; + EXPECT_TRUE(memoryManager.supportsMultiStorageResources); + } + + { + DebugManager.flags.EnableMultiStorageResources.set(0); + MockMemoryManager memoryManager; + EXPECT_FALSE(memoryManager.supportsMultiStorageResources); + } + + { + DebugManager.flags.EnableMultiStorageResources.set(1); + MockMemoryManager memoryManager; + EXPECT_TRUE(memoryManager.supportsMultiStorageResources); + } } TEST(MemoryManagerTest, whenCreatingAllocPropertiesForMultiStorageResourceThenMultiStorageResourcesFlagIsSetToTrue) { diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index 69458bab90..b0a84dc54b 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -60,8 +60,20 @@ typedef Test DrmMemoryManagerTest; typedef Test DrmMemoryManagerWithLocalMemoryTest; typedef Test DrmMemoryManagerWithExplicitExpectationsTest; -TEST_F(DrmMemoryManagerTest, whenCreatingDrmMemoryManagerThenSupportsMultiStorageResourcesFlagIsSetToFalse) { +TEST_F(DrmMemoryManagerTest, givenDebugVariableWhenCreatingDrmMemoryManagerThenSetSupportForMultiStorageResources) { EXPECT_TRUE(memoryManager->supportsMultiStorageResources); + + { + DebugManager.flags.EnableMultiStorageResources.set(0); + TestedDrmMemoryManager memoryManager(false, false, false, *executionEnvironment); + EXPECT_FALSE(memoryManager.supportsMultiStorageResources); + } + + { + DebugManager.flags.EnableMultiStorageResources.set(1); + TestedDrmMemoryManager memoryManager(false, false, false, *executionEnvironment); + EXPECT_TRUE(memoryManager.supportsMultiStorageResources); + } } TEST_F(DrmMemoryManagerTest, GivenGraphicsAllocationWhenAddAndRemoveAllocationToHostPtrManagerThenfragmentHasCorrectValues) { diff --git a/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp index c0cc524da4..11774517db 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.cpp @@ -1844,8 +1844,21 @@ TEST_F(WddmMemoryManagerSimpleTest, givenWriteCombinedAllocationThenCpuAddressIs memoryManager->freeGraphicsMemory(allocation); } -TEST_F(WddmMemoryManagerSimpleTest, whenCreatingWddmMemoryManagerThenSupportsMultiStorageResourcesFlagIsSetToFalse) { +TEST_F(WddmMemoryManagerSimpleTest, givenDebugVariableWhenCreatingWddmMemoryManagerThenSetSupportForMultiStorageResources) { + DebugManagerStateRestore restore; EXPECT_TRUE(memoryManager->supportsMultiStorageResources); + + { + DebugManager.flags.EnableMultiStorageResources.set(0); + MockWddmMemoryManager memoryManager(true, true, *executionEnvironment); + EXPECT_FALSE(memoryManager.supportsMultiStorageResources); + } + + { + DebugManager.flags.EnableMultiStorageResources.set(1); + MockWddmMemoryManager memoryManager(true, true, *executionEnvironment); + EXPECT_TRUE(memoryManager.supportsMultiStorageResources); + } } TEST_F(WddmMemoryManagerSimpleTest, givenBufferHostMemoryAllocationAndLimitedRangeAnd32BitThenAllocationGoesToSvmHeap) { diff --git a/opencl/test/unit_test/test_files/igdrcl.config b/opencl/test/unit_test/test_files/igdrcl.config index 1207aaf79e..e1b1a2b004 100644 --- a/opencl/test/unit_test/test_files/igdrcl.config +++ b/opencl/test/unit_test/test_files/igdrcl.config @@ -162,4 +162,5 @@ LimitBlitterMaxHeight = -1 FlushAfterEachBlit = -1 UseCommandBufferHeaderSizeForWddmQueueSubmission = 1 OverridePreemptionSurfaceSizeInMb = -1 -UseAsyncDrmExec = -1 \ No newline at end of file +UseAsyncDrmExec = -1 +EnableMultiStorageResources = -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 9a0d07db36..e6e2fa5ac6 100644 --- a/shared/source/debug_settings/debug_variables_base.inl +++ b/shared/source/debug_settings/debug_variables_base.inl @@ -46,6 +46,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, OverrideMaxWorkgroupSize, -1, "-1: Default, !=-1 DECLARE_DEBUG_VARIABLE(int32_t, DoCpuCopyOnReadBuffer, -1, "-1: default 0: do not use CPU copy, 1: triggers CPU copy path for Read Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") DECLARE_DEBUG_VARIABLE(int32_t, DoCpuCopyOnWriteBuffer, -1, "-1: default 0: do not use CPU copy, 1: triggers CPU copy path for Write Buffer calls, only supported for some basic use cases (no blocked user events in dependencies tree)") DECLARE_DEBUG_VARIABLE(int32_t, PauseOnEnqueue, -1, "-1: default x: pause on enqueue number x and ask for user confirmation before and after execution, counted from 0") +DECLARE_DEBUG_VARIABLE(int32_t, EnableMultiStorageResources, -1, "-1: default, 0: Disable, 1: Enable") DECLARE_DEBUG_VARIABLE(bool, EnableDebugBreak, true, "Enable DEBUG_BREAKs") DECLARE_DEBUG_VARIABLE(bool, FlushAllCaches, false, "pipe controls between enqueues flush all possible caches") DECLARE_DEBUG_VARIABLE(bool, MakeEachEnqueueBlocking, false, "equivalent of finish after each enqueue") diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index 5a3b46333d..0e586f8443 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -56,6 +56,10 @@ MemoryManager::MemoryManager(ExecutionEnvironment &executionEnvironment) : execu if (anyLocalMemorySupported) { pageFaultManager = PageFaultManager::create(); } + + if (DebugManager.flags.EnableMultiStorageResources.get() != -1) { + supportsMultiStorageResources = !!DebugManager.flags.EnableMultiStorageResources.get(); + } } MemoryManager::~MemoryManager() {