From 5b31b3173462a91fdbdf5c336e1f77b19eb25e0a Mon Sep 17 00:00:00 2001 From: Bartosz Dunajski Date: Tue, 15 Sep 2020 17:29:02 +0200 Subject: [PATCH] Remove low priority and internal engine index variables Change-Id: I984dbcedd5456cfdee284f4d2eda1371ba77f0d0 Signed-off-by: Bartosz Dunajski --- .../tools/source/metrics/metric_query_imp.cpp | 2 +- opencl/source/cl_device/cl_device.cpp | 2 +- opencl/source/cl_device/cl_device.h | 2 +- opencl/source/command_queue/command_queue.cpp | 2 +- .../source/command_queue/command_queue_hw.h | 2 +- ...te_command_queue_with_properties_tests.cpp | 2 +- .../command_queue/blit_enqueue_tests.cpp | 2 +- .../command_queue/command_queue_tests.cpp | 4 +- .../aub_command_stream_receiver_1_tests.cpp | 2 +- .../aub_command_stream_receiver_2_tests.cpp | 4 +- ...nd_stream_receiver_with_aub_dump_tests.cpp | 4 +- .../tbx_command_stream_tests.cpp | 2 +- .../test/unit_test/context/context_tests.cpp | 3 + opencl/test/unit_test/device/device_tests.cpp | 29 +++++---- .../fixtures/memory_allocator_fixture.h | 2 +- .../fixtures/memory_manager_fixture.cpp | 2 +- .../gen12lp/hw_helper_tests_gen12lp.inl | 61 +++++++------------ .../helpers/get_gpgpu_engines_tests.inl | 6 +- .../unit_test/helpers/hw_helper_tests.cpp | 5 -- .../helpers/timestamp_packet_tests.cpp | 2 +- .../unit_test/mem_obj/buffer_bcs_tests.cpp | 2 +- ...nager_allocate_in_preferred_pool_tests.inl | 2 +- .../memory_manager/memory_manager_tests.cpp | 32 ++++++---- .../memory_manager/surface_tests.cpp | 2 +- .../linux/drm_command_stream_fixture.h | 2 +- .../linux/drm_command_stream_tests.cpp | 2 +- .../performance_counters_tests.cpp | 2 +- .../windows/device_command_stream_tests.cpp | 4 +- .../windows/os_context_win_tests.cpp | 2 +- .../windows/os_interface_win_tests.cpp | 2 +- .../os_interface/windows/wddm20_tests.cpp | 2 +- .../os_interface/windows/wddm23_tests.cpp | 4 +- .../os_interface/windows/wddm_fixture.h | 4 +- .../windows/wddm_memory_manager_tests.cpp | 4 +- .../windows/wddm_memory_manager_tests.h | 4 +- .../wddm_residency_controller_tests.cpp | 4 +- .../gl/windows/gl_os_sharing_tests.cpp | 4 +- shared/source/device/device.cpp | 13 ++-- shared/source/device/device.h | 5 +- shared/source/device/device_get_engine.cpp | 5 +- shared/source/gen12lp/hw_helper_gen12lp.cpp | 12 ++-- shared/source/helpers/engine_node_helper.h | 9 +++ shared/source/helpers/hw_helper.h | 14 +---- shared/source/helpers/hw_helper_bdw_plus.inl | 8 ++- .../windows/wddm_preemption_tests.cpp | 4 +- 45 files changed, 145 insertions(+), 143 deletions(-) diff --git a/level_zero/tools/source/metrics/metric_query_imp.cpp b/level_zero/tools/source/metrics/metric_query_imp.cpp index db26267d52..4a2bf490fc 100644 --- a/level_zero/tools/source/metrics/metric_query_imp.cpp +++ b/level_zero/tools/source/metrics/metric_query_imp.cpp @@ -212,7 +212,7 @@ bool MetricsLibrary::createContext() { // Check if compute command streamer is used. auto asyncComputeEngine = std::find_if(asyncComputeEngines.begin(), asyncComputeEngines.end(), [&](const auto &engine) { - return engine == aub_stream::ENGINE_CCS; + return engine.first == aub_stream::ENGINE_CCS; }); const auto &deviceImp = *static_cast(&device); diff --git a/opencl/source/cl_device/cl_device.cpp b/opencl/source/cl_device/cl_device.cpp index 5d79724fd8..9caf1861ce 100644 --- a/opencl/source/cl_device/cl_device.cpp +++ b/opencl/source/cl_device/cl_device.cpp @@ -135,7 +135,7 @@ ClDevice *ClDevice::getDeviceById(uint32_t deviceId) { bool ClDevice::getDeviceAndHostTimer(uint64_t *deviceTimestamp, uint64_t *hostTimestamp) const { return device.getDeviceAndHostTimer(deviceTimestamp, hostTimestamp); } bool ClDevice::getHostTimer(uint64_t *hostTimestamp) const { return device.getHostTimer(hostTimestamp); } const HardwareInfo &ClDevice::getHardwareInfo() const { return device.getHardwareInfo(); } -EngineControl &ClDevice::getEngine(aub_stream::EngineType engineType, bool lowPriority) { return device.getEngine(engineType, lowPriority); } +EngineControl &ClDevice::getEngine(aub_stream::EngineType engineType, bool lowPriority, bool internalUsage) { return device.getEngine(engineType, lowPriority, internalUsage); } EngineControl &ClDevice::getDefaultEngine() { return device.getDefaultEngine(); } EngineControl &ClDevice::getInternalEngine() { return device.getInternalEngine(); } std::atomic &ClDevice::getSelectorCopyEngine() { return device.getSelectorCopyEngine(); } diff --git a/opencl/source/cl_device/cl_device.h b/opencl/source/cl_device/cl_device.h index 11340a4839..ea5b4b92ee 100644 --- a/opencl/source/cl_device/cl_device.h +++ b/opencl/source/cl_device/cl_device.h @@ -65,7 +65,7 @@ class ClDevice : public BaseObject<_cl_device_id> { bool getDeviceAndHostTimer(uint64_t *deviceTimestamp, uint64_t *hostTimestamp) const; bool getHostTimer(uint64_t *hostTimestamp) const; const HardwareInfo &getHardwareInfo() const; - EngineControl &getEngine(aub_stream::EngineType engineType, bool lowPriority); + EngineControl &getEngine(aub_stream::EngineType engineType, bool lowPriority, bool internalUsage); EngineControl &getDefaultEngine(); EngineControl &getInternalEngine(); std::atomic &getSelectorCopyEngine(); diff --git a/opencl/source/command_queue/command_queue.cpp b/opencl/source/command_queue/command_queue.cpp index 56b10a46c8..e53a97ee67 100644 --- a/opencl/source/command_queue/command_queue.cpp +++ b/opencl/source/command_queue/command_queue.cpp @@ -74,7 +74,7 @@ CommandQueue::CommandQueue(Context *context, ClDevice *device, const cl_queue_pr } if (hwInfo.capabilityTable.blitterOperationsSupported) { auto &selectorCopyEngine = device->getDeviceById(0)->getSelectorCopyEngine(); - bcsEngine = &device->getDeviceById(0)->getEngine(EngineHelpers::getBcsEngineType(hwInfo, selectorCopyEngine), false); + bcsEngine = &device->getDeviceById(0)->getEngine(EngineHelpers::getBcsEngineType(hwInfo, selectorCopyEngine), false, false); } } diff --git a/opencl/source/command_queue/command_queue_hw.h b/opencl/source/command_queue/command_queue_hw.h index 780b6b8feb..095c7144ec 100644 --- a/opencl/source/command_queue/command_queue_hw.h +++ b/opencl/source/command_queue/command_queue_hw.h @@ -42,7 +42,7 @@ class CommandQueueHw : public CommandQueue { if (clPriority & static_cast(CL_QUEUE_PRIORITY_LOW_KHR)) { priority = QueuePriority::LOW; - this->gpgpuEngine = &device->getDeviceById(0)->getEngine(HwHelperHw::lowPriorityEngineType, true); + this->gpgpuEngine = &device->getDeviceById(0)->getEngine(HwHelperHw::lowPriorityEngineType, true, false); } else if (clPriority & static_cast(CL_QUEUE_PRIORITY_MED_KHR)) { priority = QueuePriority::MEDIUM; } else if (clPriority & static_cast(CL_QUEUE_PRIORITY_HIGH_KHR)) { diff --git a/opencl/test/unit_test/api/cl_create_command_queue_with_properties_tests.cpp b/opencl/test/unit_test/api/cl_create_command_queue_with_properties_tests.cpp index 3f39b4adb3..e401a97349 100644 --- a/opencl/test/unit_test/api/cl_create_command_queue_with_properties_tests.cpp +++ b/opencl/test/unit_test/api/cl_create_command_queue_with_properties_tests.cpp @@ -494,7 +494,7 @@ HWTEST_F(LowPriorityCommandQueueTest, GivenDeviceWithSubdevicesWhenCreatingLowPr auto commandQueueObj = castToObject(cmdQ); auto subDevice = context.getDevice(0)->getDeviceById(0); - auto engine = subDevice->getEngine(HwHelperHw::lowPriorityEngineType, true); + auto engine = subDevice->getEngine(HwHelperHw::lowPriorityEngineType, true, false); EXPECT_EQ(engine.commandStreamReceiver, &commandQueueObj->getGpgpuCommandStreamReceiver()); EXPECT_EQ(engine.osContext, &commandQueueObj->getGpgpuCommandStreamReceiver().getOsContext()); diff --git a/opencl/test/unit_test/command_queue/blit_enqueue_tests.cpp b/opencl/test/unit_test/command_queue/blit_enqueue_tests.cpp index 80b64dc1f4..333a63357d 100644 --- a/opencl/test/unit_test/command_queue/blit_enqueue_tests.cpp +++ b/opencl/test/unit_test/command_queue/blit_enqueue_tests.cpp @@ -77,7 +77,7 @@ struct BlitEnqueueTests : public ::testing::Test { capabilityTable.blitterOperationsSupported = true; if (createBcsEngine) { - auto &engine = device->getEngine(HwHelperHw::lowPriorityEngineType, true); + auto &engine = device->getEngine(HwHelperHw::lowPriorityEngineType, true, false); bcsOsContext.reset(OsContext::create(nullptr, 1, device->getDeviceBitfield(), aub_stream::ENGINE_BCS, PreemptionMode::Disabled, false, false, false)); engine.osContext = bcsOsContext.get(); diff --git a/opencl/test/unit_test/command_queue/command_queue_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_tests.cpp index cc50b9e8f6..dfd908c4b4 100644 --- a/opencl/test/unit_test/command_queue/command_queue_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_tests.cpp @@ -241,13 +241,13 @@ HWTEST_P(CommandQueueWithBlitOperationsTests, givenDeviceWithSubDevicesSupportin auto subDevice = device->getDeviceById(0); if (createBcsEngine) { - auto &engine = subDevice->getEngine(HwHelperHw::lowPriorityEngineType, true); + auto &engine = subDevice->getEngine(HwHelperHw::lowPriorityEngineType, true, false); bcsOsContext.reset(OsContext::create(nullptr, 1, 0, aub_stream::ENGINE_BCS, PreemptionMode::Disabled, false, false, false)); engine.osContext = bcsOsContext.get(); engine.commandStreamReceiver->setupContext(*bcsOsContext); } - auto bcsEngine = subDevice->getEngine(aub_stream::EngineType::ENGINE_BCS, false); + auto bcsEngine = subDevice->getEngine(aub_stream::EngineType::ENGINE_BCS, false, false); MockCommandQueue cmdQ(nullptr, device.get(), 0); auto cmdType = GetParam(); diff --git a/opencl/test/unit_test/command_stream/aub_command_stream_receiver_1_tests.cpp b/opencl/test/unit_test/command_stream/aub_command_stream_receiver_1_tests.cpp index 4f416153ad..dbdbfdf67d 100644 --- a/opencl/test/unit_test/command_stream/aub_command_stream_receiver_1_tests.cpp +++ b/opencl/test/unit_test/command_stream/aub_command_stream_receiver_1_tests.cpp @@ -256,7 +256,7 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenMultipl auto &hwInfo = pDevice->getHardwareInfo(); auto engineInstance = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0]; - MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, false, false, false); + MockOsContext osContext(0, 1, engineInstance.first, PreemptionMode::Disabled, false, false, false); auto aubCsr1 = std::make_unique>("", true, *pDevice->executionEnvironment, pDevice->getRootDeviceIndex()); auto aubCsr2 = std::make_unique>("", true, *pDevice->executionEnvironment, pDevice->getRootDeviceIndex()); diff --git a/opencl/test/unit_test/command_stream/aub_command_stream_receiver_2_tests.cpp b/opencl/test/unit_test/command_stream/aub_command_stream_receiver_2_tests.cpp index 31aa657057..eae7e6a975 100644 --- a/opencl/test/unit_test/command_stream/aub_command_stream_receiver_2_tests.cpp +++ b/opencl/test/unit_test/command_stream/aub_command_stream_receiver_2_tests.cpp @@ -501,7 +501,7 @@ HWTEST_F(AubCommandStreamReceiverNoHostPtrTests, givenAubCommandStreamReceiverWh auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); auto engineInstance = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, + MockOsContext osContext(0, 1, engineInstance.first, PreemptionMode::Disabled, false, false, false); std::unique_ptr> aubCsr(new AUBCommandStreamReceiverHw("", true, *executionEnvironment, 0)); aubCsr->setupContext(osContext); @@ -751,7 +751,7 @@ HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenEngineI MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); auto hwInfo = executionEnvironment.rootDeviceEnvironments[0]->getHardwareInfo(); auto engineInstance = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, + MockOsContext osContext(0, 1, engineInstance.first, PreemptionMode::Disabled, false, false, false); executionEnvironment.initializeMemoryManager(); diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_with_aub_dump_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_with_aub_dump_tests.cpp index 2ac7e92c9d..7e9cb87512 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_with_aub_dump_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_with_aub_dump_tests.cpp @@ -150,7 +150,7 @@ HWTEST_F(CommandStreamReceiverWithAubDumpSimpleTest, givenCsrWithAubDumpWhenSett CommandStreamReceiverWithAUBDump> csrWithAubDump("aubfile", *executionEnvironment, 0); auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); - MockOsContext osContext(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + MockOsContext osContext(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); csrWithAubDump.setupContext(osContext); @@ -265,7 +265,7 @@ struct CommandStreamReceiverTagTests : public ::testing::Test { bool isTimestampPacketNodeReleasable(Args &&... args) { CsrT csr(std::forward(args)...); auto hwInfo = csr.peekExecutionEnvironment().rootDeviceEnvironments[0]->getHardwareInfo(); - MockOsContext osContext(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + MockOsContext osContext(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); csr.setupContext(osContext); diff --git a/opencl/test/unit_test/command_stream/tbx_command_stream_tests.cpp b/opencl/test/unit_test/command_stream/tbx_command_stream_tests.cpp index 3035b2f6f8..97c1ea3907 100644 --- a/opencl/test/unit_test/command_stream/tbx_command_stream_tests.cpp +++ b/opencl/test/unit_test/command_stream/tbx_command_stream_tests.cpp @@ -587,7 +587,7 @@ HWTEST_F(TbxCommandStreamTests, givenTbxCsrWhenHardwareContextIsCreatedThenTbxSt HWTEST_F(TbxCommandStreamTests, givenTbxCsrWhenOsContextIsSetThenCreateHardwareContext) { auto hwInfo = pDevice->getHardwareInfo(); - MockOsContext osContext(0, 1, HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0], + MockOsContext osContext(0, 1, HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0].first, PreemptionMode::Disabled, false, false, false); std::string fileName = ""; MockAubManager *mockManager = new MockAubManager(); diff --git a/opencl/test/unit_test/context/context_tests.cpp b/opencl/test/unit_test/context/context_tests.cpp index 18b08dccb3..932024761a 100644 --- a/opencl/test/unit_test/context/context_tests.cpp +++ b/opencl/test/unit_test/context/context_tests.cpp @@ -362,7 +362,10 @@ class ContextWithAsyncDeleterTest : public ::testing::WithParamInterface, memoryManager = new MockMemoryManager(); device = new MockClDevice{MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())}; deleter = new MockDeferredDeleter(); + + device->engines.clear(); device->injectMemoryManager(memoryManager); + device->createEngines(); memoryManager->setDeferredDeleter(deleter); } void TearDown() override { diff --git a/opencl/test/unit_test/device/device_tests.cpp b/opencl/test/unit_test/device/device_tests.cpp index 12743f6485..38f7e13966 100644 --- a/opencl/test/unit_test/device/device_tests.cpp +++ b/opencl/test/unit_test/device/device_tests.cpp @@ -78,22 +78,30 @@ TEST_F(DeviceTest, givenDeviceWhenEngineIsCreatedThenSetInitialValueForTag) { } TEST_F(DeviceTest, givenDeviceWhenAskedForSpecificEngineThenReturnIt) { - auto &engines = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo); + auto hwInfo = *defaultHwInfo; + hwInfo.featureTable.ftrCCSNode = true; + + MockClDevice mockClDevice{MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0)}; + + auto &engines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo); for (uint32_t i = 0; i < engines.size(); i++) { - bool lowPriority = (HwHelper::lowPriorityGpgpuEngineIndex == i); - auto &deviceEngine = pDevice->getEngine(engines[i], lowPriority); - EXPECT_EQ(deviceEngine.osContext->getEngineType(), engines[i]); - EXPECT_EQ(deviceEngine.osContext->isLowPriority(), lowPriority); + auto &deviceEngine = mockClDevice.getEngine(engines[i].first, false, false); + EXPECT_EQ(deviceEngine.osContext->getEngineType(), engines[i].first); + EXPECT_EQ(deviceEngine.osContext->isLowPriority(), false); } - EXPECT_THROW(pDevice->getEngine(aub_stream::ENGINE_VCS, false), std::exception); + auto &deviceEngine = mockClDevice.getEngine(hwInfo.capabilityTable.defaultEngineType, true, false); + EXPECT_EQ(deviceEngine.osContext->getEngineType(), hwInfo.capabilityTable.defaultEngineType); + EXPECT_EQ(deviceEngine.osContext->isLowPriority(), true); + + EXPECT_THROW(mockClDevice.getEngine(aub_stream::ENGINE_VCS, false, false), std::exception); } TEST_F(DeviceTest, givenDeviceWhenAskedForEngineWithValidIndexThenReturnIt) { auto &engines = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo); for (uint32_t i = 0; i < engines.size(); i++) { auto &deviceEngine = pDevice->getEngine(i); - EXPECT_EQ(deviceEngine.osContext->getEngineType(), engines[i]); + EXPECT_EQ(deviceEngine.osContext->getEngineType(), engines[i].first); } } @@ -101,8 +109,8 @@ TEST_F(DeviceTest, givenDebugVariableToAlwaysChooseEngineZeroWhenNotExistingEngi DebugManagerStateRestore restore; DebugManager.flags.OverrideInvalidEngineWithDefault.set(true); auto &engines = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo); - auto &deviceEngine = pDevice->getEngine(engines[0], false); - auto ¬ExistingEngine = pDevice->getEngine(aub_stream::ENGINE_VCS, false); + auto &deviceEngine = pDevice->getEngine(engines[0].first, false, false); + auto ¬ExistingEngine = pDevice->getEngine(aub_stream::ENGINE_VCS, false, false); EXPECT_EQ(¬ExistingEngine, &deviceEngine); } @@ -406,9 +414,6 @@ TEST(DeviceGenEngineTest, givenHwCsrModeWhenGetEngineThenDedicatedForInternalUsa auto &internalEngine = device->getInternalEngine(); auto &defaultEngine = device->getDefaultEngine(); EXPECT_NE(defaultEngine.commandStreamReceiver, internalEngine.commandStreamReceiver); - - auto internalEngineIndex = HwHelper::internalUsageEngineIndex; - EXPECT_EQ(internalEngineIndex, internalEngine.osContext->getContextId()); } TEST(DeviceGenEngineTest, whenCreateDeviceThenInternalEngineHasDefaultType) { diff --git a/opencl/test/unit_test/fixtures/memory_allocator_fixture.h b/opencl/test/unit_test/fixtures/memory_allocator_fixture.h index 77d7c5197f..fc20e89b66 100644 --- a/opencl/test/unit_test/fixtures/memory_allocator_fixture.h +++ b/opencl/test/unit_test/fixtures/memory_allocator_fixture.h @@ -30,7 +30,7 @@ class MemoryAllocatorFixture : public MemoryManagementFixture { executionEnvironment->memoryManager.reset(memoryManager); csr = &device->getGpgpuCommandStreamReceiver(); auto &hwInfo = device->getHardwareInfo(); - auto engineType = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0]; + auto engineType = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0].first; auto osContext = memoryManager->createAndRegisterOsContext(csr, engineType, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); diff --git a/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp b/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp index 3abf614318..0581363b76 100644 --- a/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp +++ b/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp @@ -25,7 +25,7 @@ void MemoryManagerWithCsrFixture::SetUp() { csr->tagAddress = ¤tGpuTag; auto hwInfo = executionEnvironment.rootDeviceEnvironments[0]->getHardwareInfo(); auto engine = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - auto osContext = memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, + auto osContext = memoryManager->createAndRegisterOsContext(csr.get(), engine.first, 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); csr->setupContext(*osContext); diff --git a/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl b/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl index 57cdc39273..0ecd2a63d8 100644 --- a/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl +++ b/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl @@ -118,10 +118,10 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeNotSetAndBcsInfoSetWhenGetGpgp EXPECT_EQ(4u, device->engines.size()); auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(4u, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2]); - EXPECT_EQ(aub_stream::ENGINE_BCS, engines[3]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2].first); + EXPECT_EQ(aub_stream::ENGINE_BCS, engines[3].first); } GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeNotSetWhenGetGpgpuEnginesThenReturnThreeRcsEngines) { @@ -136,9 +136,9 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeNotSetWhenGetGpgpuEnginesThenR auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(expectedEnginesCount, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2].first); } GEN12LPTEST_F(HwHelperTestGen12Lp, givenEvenContextCountRequiredWhenGetGpgpuEnginesIsCalledThenInsertAdditionalEngineAtTheEndIfNeeded) { @@ -165,7 +165,7 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenEvenContextCountRequiredWhenGetGpgpuEngi hwInfoConfig.evenContextCountRequired = true; engines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo); EXPECT_EQ(4u, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[engines.size() - 1]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[engines.size() - 1].first); hwInfo.featureTable.ftrCCSNode = true; engines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo); @@ -191,10 +191,10 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetWhenGetGpgpuEnginesThenRetu EXPECT_EQ(4u, device->engines.size()); auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(4u, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2]); - EXPECT_EQ(aub_stream::ENGINE_CCS, engines[3]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2].first); + EXPECT_EQ(aub_stream::ENGINE_CCS, engines[3].first); } GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetFtrGpGpuMidThreadLevelPreemptSetWhenGetGpgpuEnginesThenReturn2RcsAndCcsEngines) { @@ -209,9 +209,9 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetFtrGpGpuMidThreadLevelPreem EXPECT_EQ(retDeivices, device->engines.size()); auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(retDeivices, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2].first); } GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetFtrGpGpuMidThreadLevelPreemptNotSetWhenGetGpgpuEnginesThenReturn2RcsAnd2CcsEngines) { @@ -225,10 +225,10 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetFtrGpGpuMidThreadLevelPreem EXPECT_EQ(4u, device->engines.size()); auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(4u, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2]); - EXPECT_EQ(aub_stream::ENGINE_CCS, engines[3]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_CCS, engines[2].first); + EXPECT_EQ(aub_stream::ENGINE_CCS, engines[3].first); } GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetAndDefaultRcsWhenGetGpgpuEnginesThenReturnAppropriateNumberOfRcsEngines) { @@ -242,11 +242,11 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetAndDefaultRcsWhenGetGpgpuEn EXPECT_EQ(expectedEnginesCount, device->engines.size()); auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(expectedEnginesCount, engines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1]); - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[1].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[2].first); if (expectedEnginesCount == 4) { - EXPECT_EQ(aub_stream::ENGINE_RCS, engines[3]); + EXPECT_EQ(aub_stream::ENGINE_RCS, engines[3].first); } } @@ -274,21 +274,6 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenTgllpWhenIsFusedEuDispatchEnabledIsCalle } } -GEN12LPTEST_F(HwHelperTestGen12Lp, whenGettingComputeEngineIndexByOrdinalThenCorrectIndexIsReturned) { - auto &helper = HwHelper::get(renderCoreFamily); - HardwareInfo hwInfo = *defaultHwInfo; - hwInfo.featureTable.ftrCCSNode = true; - - EXPECT_EQ(helper.internalUsageEngineIndex + 1, helper.getComputeEngineIndexByOrdinal(hwInfo, 0)); - EXPECT_EQ(0u, helper.getComputeEngineIndexByOrdinal(hwInfo, 1)); - if (helper.getEnginesCount(hwInfo) > 1) { - auto engine0 = helper.getGpgpuEngineInstances(hwInfo)[helper.getComputeEngineIndexByOrdinal(hwInfo, 0)]; - auto engine1 = helper.getGpgpuEngineInstances(hwInfo)[helper.getComputeEngineIndexByOrdinal(hwInfo, 1)]; - - EXPECT_NE(engine0, engine1); - } -} - class HwHelperTestsGen12LpBuffer : public ::testing::Test { public: void SetUp() override { diff --git a/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl b/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl index c5d79c5852..6449954fe3 100644 --- a/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl +++ b/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl @@ -15,7 +15,7 @@ template void whenGetGpgpuEnginesThenReturnTwoRcsEngines(const HardwareInfo &hwInfo) { auto gpgpuEngines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); EXPECT_EQ(3u, gpgpuEngines.size()); - EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[0]); - EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[1]); - EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[2]); + EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[0].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[1].first); + EXPECT_EQ(aub_stream::ENGINE_RCS, gpgpuEngines[2].first); } diff --git a/opencl/test/unit_test/helpers/hw_helper_tests.cpp b/opencl/test/unit_test/helpers/hw_helper_tests.cpp index 6e4c6f7f60..33517ec90b 100644 --- a/opencl/test/unit_test/helpers/hw_helper_tests.cpp +++ b/opencl/test/unit_test/helpers/hw_helper_tests.cpp @@ -947,11 +947,6 @@ HWTEST_F(HwHelperTest, givenVariousDebugKeyValuesWhenGettingLocalMemoryAccessMod EXPECT_EQ(LocalMemoryAccessMode::CpuAccessDisallowed, hwHelper.getLocalMemoryAccessMode(*defaultHwInfo)); } -HWTEST2_F(HwHelperTest, givenSingleEnginePlatformWhenGettingComputeEngineIndexByOrdinalThenZeroIndexIsReturned, IsAtMostGen11) { - auto &helper = HwHelper::get(renderCoreFamily); - EXPECT_EQ(0u, helper.getComputeEngineIndexByOrdinal(*defaultHwInfo, 0)); -} - HWTEST2_F(HwHelperTest, givenDefaultHwHelperHwWhenGettingIsBlitCopyRequiredForLocalMemoryThenFalseIsReturned, IsAtMostGen11) { auto &helper = HwHelper::get(renderCoreFamily); EXPECT_FALSE(helper.isBlitCopyRequiredForLocalMemory(*defaultHwInfo)); diff --git a/opencl/test/unit_test/helpers/timestamp_packet_tests.cpp b/opencl/test/unit_test/helpers/timestamp_packet_tests.cpp index b66918b4ad..19eb2a334c 100644 --- a/opencl/test/unit_test/helpers/timestamp_packet_tests.cpp +++ b/opencl/test/unit_test/helpers/timestamp_packet_tests.cpp @@ -1639,7 +1639,7 @@ HWTEST_F(TimestampPacketTests, givenBlockedEnqueueWithoutKernelWhenSubmittingThe auto cmdQ0 = clUniquePtr(new MockCommandQueueHw(context, device.get(), nullptr)); - auto &secondEngine = device->getEngine(HwHelperHw::lowPriorityEngineType, true); + auto &secondEngine = device->getEngine(HwHelperHw::lowPriorityEngineType, true, false); static_cast *>(secondEngine.commandStreamReceiver)->timestampPacketWriteEnabled = true; auto cmdQ1 = clUniquePtr(new MockCommandQueueHw(context, device.get(), nullptr)); diff --git a/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp b/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp index 203ae01b16..fac1390359 100644 --- a/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp +++ b/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp @@ -99,7 +99,7 @@ struct BcsBufferTests : public ::testing::Test { capabilityTable.blitterOperationsSupported = true; if (createBcsEngine) { - auto &engine = device->getEngine(HwHelperHw::lowPriorityEngineType, true); + auto &engine = device->getEngine(HwHelperHw::lowPriorityEngineType, true, false); bcsOsContext.reset(OsContext::create(nullptr, 1, device->getDeviceBitfield(), aub_stream::ENGINE_BCS, PreemptionMode::Disabled, false, false, false)); engine.osContext = bcsOsContext.get(); diff --git a/opencl/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl b/opencl/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl index 7dc537d682..8b4616e9c3 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl +++ b/opencl/test/unit_test/memory_manager/memory_manager_allocate_in_preferred_pool_tests.inl @@ -897,7 +897,7 @@ TEST(MemoryManagerTest, givenPropertiesWithOsContextWhenGetAllocationDataIsCalle AllocationProperties properties{0, 1, GraphicsAllocation::AllocationType::DEBUG_CONTEXT_SAVE_AREA, mockDeviceBitfield}; MockOsContext osContext(0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, PreemptionMode::Disabled, false, false, false); properties.osContext = &osContext; 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 54d0d58613..f2f3b1c816 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -225,7 +225,7 @@ TEST_F(MemoryAllocatorTest, WhenAllocatingGraphicsMemoryThenAllocationHasCorrect unsigned int alignment = 4096; memoryManager->createAndRegisterOsContext(csr, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); auto allocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{csr->getRootDeviceIndex(), MemoryConstants::pageSize}); @@ -1316,7 +1316,7 @@ TEST(OsAgnosticMemoryManager, givenMemoryManagerWhenGpuAddressIsSetThenAllocatio std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); executionEnvironment.memoryManager.reset(memoryManager); auto osContext = memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); @@ -1477,7 +1477,7 @@ TEST_F(MemoryManagerWithCsrTest, givenAllocationThatWasUsedAndIsCompletedWhenche TEST_F(MemoryManagerWithCsrTest, givenAllocationThatWasUsedAndIsNotCompletedWhencheckGpuUsageAndDestroyGraphicsAllocationsIsCalledThenItIsAddedToTemporaryAllocationList) { memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); auto usedAllocationAndNotGpuCompleted = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{csr->getRootDeviceIndex(), MemoryConstants::pageSize}); @@ -1644,8 +1644,11 @@ using GraphicsAllocationTests = ::testing::Test; HWTEST_F(GraphicsAllocationTests, givenAllocationUsedOnlyByNonDefaultCsrWhenCheckingUsageBeforeDestroyThenStoreItAsTemporaryAllocation) { auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(defaultHwInfo.get())); - auto nonDefaultOsContext = device->engines[HwHelper::lowPriorityGpgpuEngineIndex].osContext; - auto nonDefaultCsr = static_cast *>(device->engines[HwHelper::lowPriorityGpgpuEngineIndex].commandStreamReceiver); + + auto &lowPriorityEngine = device->getEngine(device->getHardwareInfo().capabilityTable.defaultEngineType, true, false); + + auto nonDefaultOsContext = lowPriorityEngine.osContext; + auto nonDefaultCsr = static_cast *>(lowPriorityEngine.commandStreamReceiver); auto memoryManager = device->getExecutionEnvironment()->memoryManager.get(); auto graphicsAllocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{device->getRootDeviceIndex(), MemoryConstants::pageSize}); @@ -1691,8 +1694,11 @@ HWTEST_F(GraphicsAllocationTests, givenAllocationUsedByManyOsContextsWhenCheckin memoryManager->multiContextResourceDestructor.reset(multiContextDestructor); auto device = std::unique_ptr(MockDevice::create(executionEnvironment, 0u)); - auto nonDefaultOsContext = device->engines[HwHelper::lowPriorityGpgpuEngineIndex].osContext; - auto nonDefaultCsr = static_cast *>(device->engines[HwHelper::lowPriorityGpgpuEngineIndex].commandStreamReceiver); + + auto &lowPriorityEngine = device->getEngine(device->getHardwareInfo().capabilityTable.defaultEngineType, true, false); + + auto nonDefaultOsContext = lowPriorityEngine.osContext; + auto nonDefaultCsr = static_cast *>(lowPriorityEngine.commandStreamReceiver); auto defaultCsr = static_cast *>(device->getDefaultEngine().commandStreamReceiver); auto defaultOsContext = device->getDefaultEngine().osContext; @@ -1729,7 +1735,7 @@ TEST(ResidencyDataTest, givenOsContextWhenItIsRegisteredToMemoryManagerThenRefCo executionEnvironment.memoryManager.reset(memoryManager); std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); EXPECT_EQ(1u, memoryManager->getRegisteredEnginesCount()); @@ -1758,7 +1764,7 @@ TEST(ResidencyDataTest, givenDeviceBitfieldWhenCreatingOsContextThenSetValidValu DeviceBitfield deviceBitfield = 0b11; PreemptionMode preemptionMode = PreemptionMode::MidThread; memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, deviceBitfield, preemptionMode, false, false, false); EXPECT_EQ(2u, memoryManager->registeredEngines[0].osContext->getNumSupportedDevices()); @@ -1773,11 +1779,11 @@ TEST(ResidencyDataTest, givenTwoOsContextsWhenTheyAreRegisteredFromHigherToLower std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); std::unique_ptr csr1(createCommandStream(executionEnvironment, 1u)); memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); memoryManager->createAndRegisterOsContext(csr1.get(), - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[1], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[1].first, 1, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); EXPECT_EQ(2u, memoryManager->getRegisteredEnginesCount()); @@ -1799,10 +1805,10 @@ TEST(ResidencyDataTest, givenResidencyDataWhenUpdateCompletionDataIsCalledThenIt MockResidencyData residency(MemoryManager::maxOsContextCount); MockOsContext osContext(0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); MockOsContext osContext2(1u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[1], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[1].first, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); auto lastFenceValue = 45llu; diff --git a/opencl/test/unit_test/memory_manager/surface_tests.cpp b/opencl/test/unit_test/memory_manager/surface_tests.cpp index e58e0dd213..fd902c3248 100644 --- a/opencl/test/unit_test/memory_manager/surface_tests.cpp +++ b/opencl/test/unit_test/memory_manager/surface_tests.cpp @@ -66,7 +66,7 @@ HWTEST_TYPED_TEST(SurfaceTest, GivenSurfaceWhenInterfaceIsUsedThenSurfaceBehaves executionEnvironment->initializeMemoryManager(); auto csr = std::make_unique>(execStamp, *executionEnvironment, 0); auto hwInfo = *defaultHwInfo; - auto engine = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0]; + auto engine = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0].first; auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, PreemptionHelper::getDefaultPreemptionMode(hwInfo), false, false, false); diff --git a/opencl/test/unit_test/os_interface/linux/drm_command_stream_fixture.h b/opencl/test/unit_test/os_interface/linux/drm_command_stream_fixture.h index c4e9923345..02842a2761 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_command_stream_fixture.h +++ b/opencl/test/unit_test/os_interface/linux/drm_command_stream_fixture.h @@ -39,7 +39,7 @@ class DrmCommandStreamTest : public ::testing::Test { auto hwInfo = executionEnvironment.rootDeviceEnvironments[0]->getHardwareInfo(); mock->createVirtualMemoryAddressSpace(HwHelper::getSubDevicesCount(hwInfo)); - osContext = std::make_unique(*mock, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + osContext = std::make_unique(*mock, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); diff --git a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests.cpp index df2fcd1a1a..28f3f0af79 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests.cpp @@ -231,7 +231,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamTest, givenDrmContextIdWhenFlushingThenSetIdT .RetiresOnSaturation(); osContext = std::make_unique(*mock, 1, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), false, false, false); csr->setupContext(*osContext); diff --git a/opencl/test/unit_test/os_interface/performance_counters_tests.cpp b/opencl/test/unit_test/os_interface/performance_counters_tests.cpp index 13344bb0d8..0e640ada35 100644 --- a/opencl/test/unit_test/os_interface/performance_counters_tests.cpp +++ b/opencl/test/unit_test/os_interface/performance_counters_tests.cpp @@ -213,7 +213,7 @@ struct PerformanceCountersMetricsLibraryTest : public PerformanceCountersMetrics void SetUp() override { PerformanceCountersMetricsLibraryFixture::SetUp(); auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); - osContext = std::make_unique(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + osContext = std::make_unique(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); queue->getGpgpuCommandStreamReceiver().setupContext(*osContext); } diff --git a/opencl/test/unit_test/os_interface/windows/device_command_stream_tests.cpp b/opencl/test/unit_test/os_interface/windows/device_command_stream_tests.cpp index e880000019..5caedcba7f 100644 --- a/opencl/test/unit_test/os_interface/windows/device_command_stream_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/device_command_stream_tests.cpp @@ -292,7 +292,7 @@ TEST(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIsOf auto csr = std::make_unique>(*executionEnvironment, 0); executionEnvironment->memoryManager.reset(new MemoryManagerCreate(false, false, *executionEnvironment)); csr->overrideDispatchPolicy(DispatchMode::ImmediateDispatch); - OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); csr->setupContext(osContext); @@ -318,7 +318,7 @@ TEST(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIsOn auto csr = std::make_unique>(*executionEnvironment, 0); executionEnvironment->memoryManager.reset(new MemoryManagerCreate(false, false, *executionEnvironment)); csr->overrideDispatchPolicy(DispatchMode::ImmediateDispatch); - OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); csr->setupContext(osContext); diff --git a/opencl/test/unit_test/os_interface/windows/os_context_win_tests.cpp b/opencl/test/unit_test/os_interface/windows/os_context_win_tests.cpp index 62c88f0dd5..af9a66d32f 100644 --- a/opencl/test/unit_test/os_interface/windows/os_context_win_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/os_context_win_tests.cpp @@ -16,7 +16,7 @@ struct OsContextWinTest : public WddmTestWithMockGdiDll { void SetUp() override { WddmTestWithMockGdiDll::SetUp(); preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); - engineType = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0]; + engineType = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first; init(); } diff --git a/opencl/test/unit_test/os_interface/windows/os_interface_win_tests.cpp b/opencl/test/unit_test/os_interface/windows/os_interface_win_tests.cpp index 840cea1a6b..9806a1a6cd 100644 --- a/opencl/test/unit_test/os_interface/windows/os_interface_win_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/os_interface_win_tests.cpp @@ -32,7 +32,7 @@ TEST(OsContextTest, givenWddmWhenCreateOsContextAfterInitWddmThenOsContextIsInit wddm->init(); EXPECT_EQ(0u, wddm->registerTrimCallbackResult.called); auto osContext = std::make_unique(*wddm, 0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, preemptionMode, false, false, false); EXPECT_TRUE(osContext->isInitialized()); EXPECT_EQ(osContext->getWddm(), wddm); diff --git a/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp index 5110df2e3c..2a3579b2d5 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp @@ -623,7 +623,7 @@ TEST_F(Wddm20WithMockGdiDllTestsWithoutWddmInit, givenUseNoRingFlushesKmdModeDeb TEST_F(Wddm20WithMockGdiDllTestsWithoutWddmInit, givenEngineTypeWhenCreatingContextThenPassCorrectNodeOrdinal) { init(); auto createContextParams = this->getCreateContextDataFcn(); - UINT expected = WddmEngineMapper::engineNodeMap(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0]); + UINT expected = WddmEngineMapper::engineNodeMap(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first); EXPECT_EQ(expected, createContextParams->NodeOrdinal); } diff --git a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp index 98e4a8ca8c..eefd286129 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp @@ -46,7 +46,7 @@ struct Wddm23TestsWithoutWddmInit : public ::testing::Test, GdiDllFixture { wddm->init(); wddm->wddmInterface.reset(wddmMockInterface); osContext = std::make_unique(*wddm, 0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, preemptionMode, false, false, false); } @@ -78,7 +78,7 @@ TEST_F(Wddm23Tests, whenCreateContextIsCalledThenEnableHwQueues) { } TEST_F(Wddm23Tests, givenPreemptionModeWhenCreateHwQueueCalledThenSetGpuTimeoutIfEnabled) { - auto defaultEngine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0]; + auto defaultEngine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first; OsContextWin osContextWithoutPreemption(*wddm, 0u, 1, defaultEngine, PreemptionMode::Disabled, false, false, false); OsContextWin osContextWithPreemption(*wddm, 0u, 1, defaultEngine, PreemptionMode::MidBatch, diff --git a/opencl/test/unit_test/os_interface/windows/wddm_fixture.h b/opencl/test/unit_test/os_interface/windows/wddm_fixture.h index 955ff3cc3b..248ec33bc5 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_fixture.h +++ b/opencl/test/unit_test/os_interface/windows/wddm_fixture.h @@ -46,7 +46,7 @@ struct WddmFixture : public Test { auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); auto hwInfo = rootDeviceEnvironemnt->getHardwareInfo(); - auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first; osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1u, engine, preemptionMode, false, false, false); mockTemporaryResources = static_cast(wddm->temporaryResources.get()); @@ -82,7 +82,7 @@ struct WddmFixtureWithMockGdiDll : public GdiDllFixture, public MockExecutionEnv wddm->wddmInterface.reset(wddmMockInterface); auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); - auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first; osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1, engine, preemptionMode, false, false, false); } 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 4426ab2c14..a55de6ba0a 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 @@ -358,7 +358,7 @@ TEST_F(WddmMemoryManagerSimpleTest, givenNonZeroFenceValuesOnMultipleEnginesRegi executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface = std::make_unique(wddm2); auto hwInfo = executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->getHardwareInfo(); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1], + memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1].first, 2, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); ASSERT_EQ(2u, memoryManager->getRegisteredEnginesCount()); @@ -390,7 +390,7 @@ TEST_F(WddmMemoryManagerSimpleTest, givenNonZeroFenceValueOnSomeOfMultipleEngine executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->memoryOperationsInterface = std::make_unique(wddm2); auto hwInfo = executionEnvironment->rootDeviceEnvironments[rootDeviceIndex]->getHardwareInfo(); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1], + memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1].first, 2, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); ASSERT_EQ(2u, memoryManager->getRegisteredEnginesCount()); diff --git a/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.h b/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.h index 3baa02f11e..505635f7d4 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.h +++ b/opencl/test/unit_test/os_interface/windows/wddm_memory_manager_tests.h @@ -68,7 +68,7 @@ class MockWddmMemoryManagerFixture { csr.reset(createCommandStream(*executionEnvironment, 0u)); auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); osContext = memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); osContext->incRefInternal(); @@ -120,7 +120,7 @@ class WddmMemoryManagerFixtureWithGmockWddm : public ExecutionEnvironmentFixture csr.reset(createCommandStream(*executionEnvironment, 0u)); auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); osContext = memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, 1, preemptionMode, false, false, false); osContext->incRefInternal(); diff --git a/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp index 57df8806b0..36aef93b6d 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp @@ -132,7 +132,7 @@ struct WddmResidencyControllerWithMockWddmTest : public WddmResidencyControllerT csr.reset(createCommandStream(*executionEnvironment, 0u)); auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); osContext = memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], 1, preemptionMode, + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, 1, preemptionMode, false, false, false); osContext->incRefInternal(); @@ -168,7 +168,7 @@ struct WddmResidencyControllerWithGdiAndMemoryManagerTest : ::testing::Test { csr.reset(createCommandStream(*executionEnvironment, 0u)); auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); osContext = memoryManager->createAndRegisterOsContext(csr.get(), - HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first, 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false, false, false); diff --git a/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp b/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp index 025fb2436a..fdf0539498 100644 --- a/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp +++ b/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp @@ -343,7 +343,7 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); OsContextWin osContext(*wddm, 0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, preemptionMode, false, false, false); CL_GL_SYNC_INFO syncInfo = {}; @@ -404,7 +404,7 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); OsContextWin osContext(*wddm, 0u, 1, - HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], + HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0].first, preemptionMode, false, false, false); CL_GL_SYNC_INFO syncInfo = {}; diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 91d40ca122..942c19697e 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -115,7 +115,7 @@ std::unique_ptr Device::createCommandStreamReceiver() con return std::unique_ptr(createCommandStream(*executionEnvironment, getRootDeviceIndex())); } -bool Device::createEngine(uint32_t deviceCsrIndex, aub_stream::EngineType engineType) { +bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsage) { auto &hwInfo = getHardwareInfo(); auto defaultEngineType = getChosenEngineType(hwInfo); @@ -124,7 +124,9 @@ bool Device::createEngine(uint32_t deviceCsrIndex, aub_stream::EngineType engine return false; } - bool internalUsage = (deviceCsrIndex == HwHelper::internalUsageEngineIndex); + auto engineType = engineTypeUsage.first; + + bool internalUsage = (engineTypeUsage.second == EngineUsage::Internal); if (internalUsage) { commandStreamReceiver->initializeDefaultsForInternalEngine(); } @@ -133,7 +135,7 @@ bool Device::createEngine(uint32_t deviceCsrIndex, aub_stream::EngineType engine commandStreamReceiver->createPageTableManager(); } - bool lowPriority = (deviceCsrIndex == HwHelper::lowPriorityGpgpuEngineIndex); + bool lowPriority = (engineTypeUsage.second == EngineUsage::LowPriority); auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(commandStreamReceiver.get(), engineType, getDeviceBitfield(), preemptionMode, lowPriority, internalUsage, false); @@ -208,10 +210,11 @@ bool Device::isDebuggerActive() const { return deviceInfo.debuggerActive; } -EngineControl &Device::getEngine(aub_stream::EngineType engineType, bool lowPriority) { +EngineControl &Device::getEngine(aub_stream::EngineType engineType, bool lowPriority, bool internalUsage) { for (auto &engine : engines) { if (engine.osContext->getEngineType() == engineType && - engine.osContext->isLowPriority() == lowPriority) { + engine.osContext->isLowPriority() == lowPriority && + engine.osContext->isInternalEngine() == internalUsage) { return engine; } } diff --git a/shared/source/device/device.h b/shared/source/device/device.h index 204cf413ee..540a4dc321 100644 --- a/shared/source/device/device.h +++ b/shared/source/device/device.h @@ -12,6 +12,7 @@ #include "shared/source/execution_environment/root_device_environment.h" #include "shared/source/helpers/common_types.h" #include "shared/source/helpers/engine_control.h" +#include "shared/source/helpers/engine_node_helper.h" #include "shared/source/helpers/hw_info.h" #include "opencl/source/os_interface/performance_counters.h" @@ -43,7 +44,7 @@ class Device : public ReferenceTrackedObject { bool getHostTimer(uint64_t *hostTimestamp) const; const HardwareInfo &getHardwareInfo() const; const DeviceInfo &getDeviceInfo() const; - EngineControl &getEngine(aub_stream::EngineType engineType, bool lowPriority); + EngineControl &getEngine(aub_stream::EngineType engineType, bool lowPriority, bool internalUsage); std::vector> &getEngineGroups() { return this->engineGroups; } @@ -111,7 +112,7 @@ class Device : public ReferenceTrackedObject { virtual bool createDeviceImpl(); virtual bool createEngines(); - bool createEngine(uint32_t deviceCsrIndex, aub_stream::EngineType engineType); + bool createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsage); MOCKABLE_VIRTUAL std::unique_ptr createCommandStreamReceiver() const; virtual uint64_t getGlobalMemorySize() const; diff --git a/shared/source/device/device_get_engine.cpp b/shared/source/device/device_get_engine.cpp index 6d2292b751..398260abbc 100644 --- a/shared/source/device/device_get_engine.cpp +++ b/shared/source/device/device_get_engine.cpp @@ -15,6 +15,9 @@ EngineControl &Device::getInternalEngine() { if (this->engines[0].commandStreamReceiver->getType() != CommandStreamReceiverType::CSR_HW) { return this->getDefaultEngine(); } - return this->getDeviceById(0)->engines[HwHelper::internalUsageEngineIndex]; + + auto engineType = getChosenEngineType(getHardwareInfo()); + + return this->getDeviceById(0)->getEngine(engineType, false, true); } } // namespace NEO diff --git a/shared/source/gen12lp/hw_helper_gen12lp.cpp b/shared/source/gen12lp/hw_helper_gen12lp.cpp index ae4b8d670e..66ce1b4f64 100644 --- a/shared/source/gen12lp/hw_helper_gen12lp.cpp +++ b/shared/source/gen12lp/hw_helper_gen12lp.cpp @@ -158,22 +158,22 @@ const HwHelper::EngineInstancesContainer HwHelperHw::getGpgpuEngineInsta auto defaultEngine = getChosenEngineType(hwInfo); EngineInstancesContainer engines = { - aub_stream::ENGINE_RCS, - aub_stream::ENGINE_RCS, // low priority - defaultEngine // internal usage + {aub_stream::ENGINE_RCS, EngineUsage::Regular}, + {aub_stream::ENGINE_RCS, EngineUsage::LowPriority}, // low priority + {defaultEngine, EngineUsage::Internal}, // internal usage }; if (defaultEngine == aub_stream::EngineType::ENGINE_CCS && hwInfo.featureTable.ftrCCSNode && !hwInfo.featureTable.ftrGpGpuMidThreadLevelPreempt) { - engines.push_back(aub_stream::ENGINE_CCS); + engines.push_back({aub_stream::ENGINE_CCS, EngineUsage::Regular}); } if (hwInfo.featureTable.ftrBcsInfo.test(0)) { - engines.push_back(aub_stream::ENGINE_BCS); + engines.push_back({aub_stream::ENGINE_BCS, EngineUsage::Regular}); } auto hwInfoConfig = HwInfoConfig::get(hwInfo.platform.eProductFamily); if (hwInfoConfig->isEvenContextCountRequired() && engines.size() & 1) { - engines.push_back(aub_stream::ENGINE_RCS); + engines.push_back({aub_stream::ENGINE_RCS, EngineUsage::Regular}); } return engines; diff --git a/shared/source/helpers/engine_node_helper.h b/shared/source/helpers/engine_node_helper.h index 3347325a7a..71bf861a2c 100644 --- a/shared/source/helpers/engine_node_helper.h +++ b/shared/source/helpers/engine_node_helper.h @@ -10,10 +10,19 @@ #include "engine_node.h" #include +#include namespace NEO { struct HardwareInfo; +enum class EngineUsage : uint32_t { + Regular, + LowPriority, + Internal +}; + +using EngineTypeUsage = std::pair; + namespace EngineHelpers { bool isCcs(aub_stream::EngineType engineType); bool isBcs(aub_stream::EngineType engineType); diff --git a/shared/source/helpers/hw_helper.h b/shared/source/helpers/hw_helper.h index 9c6c8f9bd1..a65e3ac791 100644 --- a/shared/source/helpers/hw_helper.h +++ b/shared/source/helpers/hw_helper.h @@ -10,6 +10,7 @@ #include "shared/source/command_stream/linear_stream.h" #include "shared/source/commands/bxml_generator_glue.h" #include "shared/source/helpers/aux_translation.h" +#include "shared/source/helpers/engine_node_helper.h" #include "opencl/source/aub_mem_dump/aub_mem_dump.h" #include "opencl/source/mem_obj/buffer.h" @@ -44,7 +45,7 @@ enum class EngineGroupType : uint32_t { class HwHelper { public: - using EngineInstancesContainer = StackVec; + using EngineInstancesContainer = StackVec; static HwHelper &get(GFXCORE_FAMILY gfxCore); virtual uint32_t getBindingTableStateSurfaceStatePointer(const void *pBindingTable, uint32_t index) = 0; virtual size_t getBindingTableStateSize() const = 0; @@ -56,7 +57,6 @@ class HwHelper { virtual uint32_t getMaxNumSamplers() const = 0; virtual void setCapabilityCoherencyFlag(const HardwareInfo *pHwInfo, bool &coherencyFlag) = 0; virtual void adjustDefaultEngineType(HardwareInfo *pHwInfo) = 0; - virtual uint32_t getComputeEngineIndexByOrdinal(const HardwareInfo &hwInfo, uint32_t ordinal) const = 0; virtual void setupHardwareCapabilities(HardwareCapabilities *caps, const HardwareInfo &hwInfo) = 0; virtual bool isL3Configurable(const HardwareInfo &hwInfo) = 0; virtual SipKernelType getSipKernelType(bool debuggingActive) = 0; @@ -129,9 +129,6 @@ class HwHelper { static uint32_t getEnginesCount(const HardwareInfo &hwInfo); static uint32_t getCopyEnginesCount(const HardwareInfo &hwInfo); - static constexpr uint32_t lowPriorityGpgpuEngineIndex = 1; - static constexpr uint32_t internalUsageEngineIndex = 2; - protected: virtual LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0; @@ -198,13 +195,6 @@ class HwHelperHw : public HwHelper { void adjustDefaultEngineType(HardwareInfo *pHwInfo) override; - uint32_t getComputeEngineIndexByOrdinal(const HardwareInfo &hwInfo, uint32_t ordinal) const override { - if (hwInfo.featureTable.ftrCCSNode && ordinal < hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled) { - return ordinal + internalUsageEngineIndex + 1; - } - return 0; - } - void setupHardwareCapabilities(HardwareCapabilities *caps, const HardwareInfo &hwInfo) override; bool isL3Configurable(const HardwareInfo &hwInfo) override; diff --git a/shared/source/helpers/hw_helper_bdw_plus.inl b/shared/source/helpers/hw_helper_bdw_plus.inl index 54c19eff8b..2cfc957f58 100644 --- a/shared/source/helpers/hw_helper_bdw_plus.inl +++ b/shared/source/helpers/hw_helper_bdw_plus.inl @@ -57,9 +57,11 @@ bool HwHelperHw::obtainBlitterPreference(const HardwareInfo &hwInfo) con template const HwHelper::EngineInstancesContainer HwHelperHw::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const { - return {aub_stream::ENGINE_RCS, - aub_stream::ENGINE_RCS, // low priority - aub_stream::ENGINE_RCS}; // internal usage + return { + {aub_stream::ENGINE_RCS, EngineUsage::Regular}, + {aub_stream::ENGINE_RCS, EngineUsage::LowPriority}, + {aub_stream::ENGINE_RCS, EngineUsage::Internal}, + }; } template diff --git a/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp index 54ccd27c31..2df61e4c96 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp @@ -43,7 +43,7 @@ class WddmPreemptionTests : public Test { wddm->init(); hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); ASSERT_NE(nullptr, hwInfo); - auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0].first; osContext = std::make_unique(*wddm, 0u, 1, engine, preemptionMode, false, false, false); } @@ -116,4 +116,4 @@ TEST_F(WddmPreemptionTests, whenFlagToOverridePreemptionSurfaceSizeIsSetThenSurf TEST_F(WddmPreemptionTests, whenFlagToOverridePreemptionSurfaceSizeIsNotSetThenSurfaceSizeIsNotChanged) { createAndInitWddm(0u); EXPECT_EQ(wddm->getGtSysInfo()->CsrSizeInMb, hwInfo->gtSystemInfo.CsrSizeInMb); -} \ No newline at end of file +}