From 927c097b0e4b6c10925bc26a12eb1a8c96b5da25 Mon Sep 17 00:00:00 2001 From: Maciej Dziuban Date: Mon, 19 Apr 2021 15:06:08 +0000 Subject: [PATCH] Correct default engine index in MemoryManager Related-To: NEO-5610 Signed-off-by: Maciej Dziuban --- opencl/test/unit_test/device/device_tests.cpp | 31 +++++++++++++++++++ .../unit_test/mocks/mock_memory_manager.h | 1 + shared/source/device/device.cpp | 10 +++++- 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/opencl/test/unit_test/device/device_tests.cpp b/opencl/test/unit_test/device/device_tests.cpp index 7d34340910..a667c4ca3d 100644 --- a/opencl/test/unit_test/device/device_tests.cpp +++ b/opencl/test/unit_test/device/device_tests.cpp @@ -22,6 +22,7 @@ #include "opencl/test/unit_test/mocks/mock_context.h" #include "opencl/test/unit_test/mocks/mock_csr.h" #include "opencl/test/unit_test/mocks/mock_execution_environment.h" +#include "opencl/test/unit_test/mocks/mock_memory_manager.h" #include "opencl/test/unit_test/mocks/mock_platform.h" #include "test.h" @@ -188,6 +189,36 @@ HWTEST_F(DeviceTest, givenNoHwCsrTypeAndModifiedDefaultEngineIndexWhenIsSimulati } } +HWTEST_F(DeviceTest, givenDeviceWithoutSubDevicesWhenCreatingContextsThenMemoryManagerDefaultContextIsSetCorrectly) { + UltDeviceFactory factory(1, 1); + MockDevice &device = *factory.rootDevices[0]; + MockMemoryManager *memoryManager = static_cast(device.getMemoryManager()); + + OsContext *defaultOsContextMemoryManager = memoryManager->registeredEngines[memoryManager->defaultEngineIndex].osContext; + OsContext *defaultOsContextRootDevice = device.getDefaultEngine().osContext; + EXPECT_EQ(defaultOsContextRootDevice, defaultOsContextMemoryManager); +} + +HWTEST_F(DeviceTest, givenDeviceWithSubDevicesWhenCreatingContextsThenMemoryManagerDefaultContextIsSetCorrectly) { + UltDeviceFactory factory(1, 2); + MockDevice &device = *factory.rootDevices[0]; + MockMemoryManager *memoryManager = static_cast(device.getMemoryManager()); + + OsContext *defaultOsContextMemoryManager = memoryManager->registeredEngines[memoryManager->defaultEngineIndex].osContext; + OsContext *defaultOsContextRootDevice = device.getDefaultEngine().osContext; + EXPECT_EQ(defaultOsContextRootDevice, defaultOsContextMemoryManager); +} + +HWTEST_F(DeviceTest, givenMultiDeviceWhenCreatingContextsThenMemoryManagerDefaultContextIsSetCorrectly) { + UltDeviceFactory factory(3, 2); + MockDevice &device = *factory.rootDevices[2]; + MockMemoryManager *memoryManager = static_cast(device.getMemoryManager()); + + OsContext *defaultOsContextMemoryManager = memoryManager->registeredEngines[memoryManager->defaultEngineIndex].osContext; + OsContext *defaultOsContextRootDevice = device.getDefaultEngine().osContext; + EXPECT_EQ(defaultOsContextRootDevice, defaultOsContextMemoryManager); +} + TEST(DeviceCleanup, givenDeviceWhenItIsDestroyedThenFlushBatchedSubmissionsIsCalled) { auto mockDevice = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(nullptr)); MockCommandStreamReceiver *csr = new MockCommandStreamReceiver(*mockDevice->getExecutionEnvironment(), mockDevice->getRootDeviceIndex(), mockDevice->getDeviceBitfield()); diff --git a/opencl/test/unit_test/mocks/mock_memory_manager.h b/opencl/test/unit_test/mocks/mock_memory_manager.h index 6c43cd0c5a..099d45d69c 100644 --- a/opencl/test/unit_test/mocks/mock_memory_manager.h +++ b/opencl/test/unit_test/mocks/mock_memory_manager.h @@ -37,6 +37,7 @@ class MockMemoryManager : public MemoryManagerCreate { using MemoryManager::allocateGraphicsMemoryWithProperties; using MemoryManager::createGraphicsAllocation; using MemoryManager::createStorageInfoFromProperties; + using MemoryManager::defaultEngineIndex; using MemoryManager::getAllocationData; using MemoryManager::gfxPartitions; using MemoryManager::localMemoryUsageBankSelector; diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 5c35be0ca2..37da64b1a7 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -83,7 +83,15 @@ bool Device::createDeviceImpl() { } } - executionEnvironment->memoryManager->setDefaultEngineIndex(defaultEngineIndex); + uint32_t defaultEngineIndexWithinMemoryManager = 0; + for (auto engineIndex = 0u; engineIndex < executionEnvironment->memoryManager->getRegisteredEnginesCount(); engineIndex++) { + OsContext *engine = executionEnvironment->memoryManager->getRegisteredEngines()[engineIndex].osContext; + if (engine == getDefaultEngine().osContext) { + defaultEngineIndexWithinMemoryManager = engineIndex; + break; + } + } + executionEnvironment->memoryManager->setDefaultEngineIndex(defaultEngineIndexWithinMemoryManager); auto osInterface = getRootDeviceEnvironment().osInterface.get();