From 750036742d72a12f5db31c16fb4987dbc17c01df Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Fri, 21 Feb 2020 15:25:04 +0100 Subject: [PATCH] Create only available engines Change-Id: If7880db0dd7aa76b578d0e4e300f510ca686b825 Signed-off-by: Dunajski, Bartosz --- .../command_queue/gpgpu_walker_base.inl | 4 +- .../command_queue/gpgpu_walker_bdw_plus.inl | 2 +- opencl/source/gen12lp/hw_helper_gen12lp.cpp | 20 ++- .../aub_command_stream_receiver_1_tests.cpp | 3 +- .../aub_command_stream_receiver_2_tests.cpp | 8 +- ...nd_stream_receiver_with_aub_dump_tests.cpp | 6 +- .../tbx_command_stream_tests.cpp | 2 +- opencl/test/unit_test/device/device_tests.cpp | 35 +++-- .../unit_test/device/sub_device_tests.cpp | 2 +- .../execution_environment_tests.cpp | 7 +- .../fixtures/memory_allocator_fixture.h | 3 +- .../fixtures/memory_manager_fixture.cpp | 5 +- .../unit_test/gen11/hw_helper_tests_gen11.cpp | 2 +- .../gen12lp/hw_helper_tests_gen12lp.inl | 40 +++++- .../unit_test/gen8/hw_helper_tests_gen8.cpp | 2 +- .../unit_test/gen9/hw_helper_tests_gen9.cpp | 2 +- .../helpers/get_gpgpu_engines_tests.inl | 4 +- .../memory_manager/memory_manager_tests.cpp | 28 ++-- .../memory_manager/surface_tests.cpp | 5 +- .../linux/device_command_stream_fixture.h | 2 +- .../linux/drm_command_stream_fixture.h | 5 +- .../linux/drm_command_stream_tests.cpp | 2 +- .../windows/device_command_stream_tests.cpp | 4 +- .../windows/gl/gl_os_sharing_tests.cpp | 6 +- .../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 | 9 +- .../windows/wddm_memory_manager_tests.cpp | 10 +- .../windows/wddm_memory_manager_tests.h | 10 +- .../wddm_residency_controller_tests.cpp | 10 +- .../unit_test/profiling/profiling_tests.cpp | 132 ++++++++---------- shared/source/device/device.cpp | 5 +- .../execution_environment.cpp | 7 +- shared/source/helpers/hw_helper.h | 5 +- shared/source/helpers/hw_helper_bdw_plus.inl | 9 +- .../windows/wddm_preemption_tests.cpp | 4 +- .../unit_test/preemption/preemption_tests.cpp | 3 +- 39 files changed, 242 insertions(+), 171 deletions(-) diff --git a/opencl/source/command_queue/gpgpu_walker_base.inl b/opencl/source/command_queue/gpgpu_walker_base.inl index 5a9928841b..7ce8fc521b 100644 --- a/opencl/source/command_queue/gpgpu_walker_base.inl +++ b/opencl/source/command_queue/gpgpu_walker_base.inl @@ -160,7 +160,7 @@ void GpgpuWalkerHelper::dispatchPerfCountersCommandsStart( LinearStream *commandStream) { const auto pPerformanceCounters = commandQueue.getPerfCounters(); - const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getDevice().getDefaultEngine().osContext->getEngineType()) + const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getGpgpuEngine().osContext->getEngineType()) ? MetricsLibraryApi::GpuCommandBufferType::Compute : MetricsLibraryApi::GpuCommandBufferType::Render; const uint32_t size = pPerformanceCounters->getGpuCommandsSize(commandBufferType, true); @@ -176,7 +176,7 @@ void GpgpuWalkerHelper::dispatchPerfCountersCommandsEnd( LinearStream *commandStream) { const auto pPerformanceCounters = commandQueue.getPerfCounters(); - const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getDevice().getDefaultEngine().osContext->getEngineType()) + const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getGpgpuEngine().osContext->getEngineType()) ? MetricsLibraryApi::GpuCommandBufferType::Compute : MetricsLibraryApi::GpuCommandBufferType::Render; const uint32_t size = pPerformanceCounters->getGpuCommandsSize(commandBufferType, false); diff --git a/opencl/source/command_queue/gpgpu_walker_bdw_plus.inl b/opencl/source/command_queue/gpgpu_walker_bdw_plus.inl index 2a8d77596a..d3fc87a27f 100644 --- a/opencl/source/command_queue/gpgpu_walker_bdw_plus.inl +++ b/opencl/source/command_queue/gpgpu_walker_bdw_plus.inl @@ -199,7 +199,7 @@ size_t EnqueueOperation::getSizeRequiredCSKernel(bool reserveProfilin } if (reservePerfCounters) { - const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getDevice().getDefaultEngine().osContext->getEngineType()) + const auto commandBufferType = EngineHelpers::isCcs(commandQueue.getGpgpuEngine().osContext->getEngineType()) ? MetricsLibraryApi::GpuCommandBufferType::Compute : MetricsLibraryApi::GpuCommandBufferType::Render; diff --git a/opencl/source/gen12lp/hw_helper_gen12lp.cpp b/opencl/source/gen12lp/hw_helper_gen12lp.cpp index 8df68957d3..543ef98d65 100644 --- a/opencl/source/gen12lp/hw_helper_gen12lp.cpp +++ b/opencl/source/gen12lp/hw_helper_gen12lp.cpp @@ -99,12 +99,20 @@ uint32_t HwHelperHw::getMetricsLibraryGenId() const { } template <> -const std::vector HwHelperHw::getGpgpuEngineInstances() const { - constexpr std::array gpgpuEngineInstances = {{aub_stream::ENGINE_RCS, - aub_stream::ENGINE_RCS, // low priority - aub_stream::ENGINE_RCS, // internal usage - aub_stream::ENGINE_CCS}}; - return std::vector(gpgpuEngineInstances.begin(), gpgpuEngineInstances.end()); +const HwHelper::EngineInstancesContainer HwHelperHw::getGpgpuEngineInstances(const HardwareInfo &hwInfo) const { + auto defaultEngine = getChosenEngineType(hwInfo); + + EngineInstancesContainer engines = { + aub_stream::ENGINE_RCS, + aub_stream::ENGINE_RCS, // low priority + defaultEngine // internal usage + }; + + if (hwInfo.featureTable.ftrCCSNode) { + engines.push_back(aub_stream::ENGINE_CCS); + } + + return engines; }; template <> 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 c3d8ef40d5..721c74ae2a 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 @@ -254,7 +254,8 @@ HWTEST_F(AubCommandStreamReceiverTests, givenGraphicsAllocationWhenMakeResidentC HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenMultipleInstancesInitializeTheirEnginesThenUniqueGlobalGttAdressesAreGenerated) { pDevice->executionEnvironment->rootDeviceEnvironments[0]->aubCenter.reset(new AubCenter()); - auto engineInstance = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; + auto &hwInfo = pDevice->getHardwareInfo(); + auto engineInstance = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0]; MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, false); auto aubCsr1 = 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 5a713ac801..50b3c24648 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 @@ -457,7 +457,8 @@ HWTEST_F(AubCommandStreamReceiverNoHostPtrTests, givenAubCommandStreamReceiverWh ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); auto memoryManager = new OsAgnosticMemoryManagerForImagesWithNoHostPtr(*executionEnvironment); executionEnvironment->memoryManager.reset(memoryManager); - auto engineInstance = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; + auto hwInfo = executionEnvironment->getHardwareInfo(); + auto engineInstance = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, false); std::unique_ptr> aubCsr(new AUBCommandStreamReceiverHw("", true, *executionEnvironment, 0)); @@ -703,9 +704,10 @@ HWTEST_F(AubCommandStreamReceiverTests, whenAubCommandStreamReceiverIsCreatedThe } HWTEST_F(AubCommandStreamReceiverTests, givenAubCommandStreamReceiverWhenEngineIsInitializedThenDumpHandleIsGenerated) { - auto engineInstance = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; - MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, false); MockExecutionEnvironment executionEnvironment(platformDevices[0]); + auto hwInfo = executionEnvironment.getHardwareInfo(); + auto engineInstance = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + MockOsContext osContext(0, 1, engineInstance, PreemptionMode::Disabled, false); executionEnvironment.initializeMemoryManager(); auto aubCsr = std::make_unique>("", true, executionEnvironment, 0); 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 ef1e0a1d73..96c4383a31 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 @@ -146,8 +146,10 @@ HWTEST_F(CommandStreamReceiverWithAubDumpSimpleTest, givenCsrWithAubDumpWhenSett executionEnvironment->initializeMemoryManager(); CommandStreamReceiverWithAUBDump> csrWithAubDump("aubfile", *executionEnvironment, 0); - MockOsContext osContext(0, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], - PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + + auto hwInfo = executionEnvironment->getHardwareInfo(); + MockOsContext osContext(0, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csrWithAubDump.setupContext(osContext); EXPECT_EQ(&osContext, &csrWithAubDump.getOsContext()); 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 d5464fa96c..5ab203d288 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 @@ -554,7 +554,7 @@ HWTEST_F(TbxCommandStreamTests, givenTbxCsrWhenHardwareContextIsCreatedThenTbxSt HWTEST_F(TbxCommandStreamTests, givenTbxCsrWhenOsContextIsSetThenCreateHardwareContext) { auto hwInfo = pDevice->getHardwareInfo(); - MockOsContext osContext(0, 1, HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + MockOsContext osContext(0, 1, HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0], PreemptionMode::Disabled, false); std::string fileName = ""; MockAubManager *mockManager = new MockAubManager(); diff --git a/opencl/test/unit_test/device/device_tests.cpp b/opencl/test/unit_test/device/device_tests.cpp index 4e4b59cfc3..379495d6a2 100644 --- a/opencl/test/unit_test/device/device_tests.cpp +++ b/opencl/test/unit_test/device/device_tests.cpp @@ -54,7 +54,7 @@ TEST_F(DeviceTest, givenDeviceWhenEngineIsCreatedThenSetInitialValueForTag) { } TEST_F(DeviceTest, givenDeviceWhenAskedForSpecificEngineThenRetrunIt) { - auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(); + auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0]); for (uint32_t i = 0; i < engines.size(); i++) { bool lowPriority = (HwHelper::lowPriorityGpgpuEngineIndex == i); auto &deviceEngine = pDevice->getEngine(engines[i], lowPriority); @@ -68,7 +68,7 @@ TEST_F(DeviceTest, givenDeviceWhenAskedForSpecificEngineThenRetrunIt) { TEST_F(DeviceTest, givenDebugVariableToAlwaysChooseEngineZeroWhenNotExistingEngineSelectedThenIndexZeroEngineIsReturned) { DebugManagerStateRestore restore; DebugManager.flags.OverrideInvalidEngineWithDefault.set(true); - auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(); + auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0]); auto &deviceEngine = pDevice->getEngine(engines[0], false); auto ¬ExistingEngine = pDevice->getEngine(aub_stream::ENGINE_VCS, false); EXPECT_EQ(¬ExistingEngine, &deviceEngine); @@ -116,13 +116,18 @@ TEST_F(DeviceTest, WhenAppendingOsExtensionsThenDeviceInfoIsProperlyUpdated) { EXPECT_STREQ(expectedExtensions.c_str(), pDevice->deviceInfo.deviceExtensions); } -TEST_F(DeviceTest, WhenDeviceIsCreatedThenActualEngineTypeIsSameAsDefault) { - auto pTestDevice = std::unique_ptr(createWithUsDeviceId(0)); +HWTEST_F(DeviceTest, WhenDeviceIsCreatedThenActualEngineTypeIsSameAsDefault) { + HardwareInfo hwInfo = *platformDevices[0]; + if (hwInfo.capabilityTable.defaultEngineType == aub_stream::EngineType::ENGINE_CCS) { + hwInfo.featureTable.ftrCCSNode = true; + } - auto actualEngineType = pDevice->getDefaultEngine().osContext->getEngineType(); - auto defaultEngineType = pDevice->getHardwareInfo().capabilityTable.defaultEngineType; + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0)); - EXPECT_EQ(&pDevice->getDefaultEngine().commandStreamReceiver->getOsContext(), pDevice->getDefaultEngine().osContext); + auto actualEngineType = device->getDefaultEngine().osContext->getEngineType(); + auto defaultEngineType = device->getHardwareInfo().capabilityTable.defaultEngineType; + + EXPECT_EQ(&device->getDefaultEngine().commandStreamReceiver->getOsContext(), device->getDefaultEngine().osContext); EXPECT_EQ(defaultEngineType, actualEngineType); } @@ -183,7 +188,8 @@ TEST(DeviceCreation, givenDefaultHwCsrInDebugVarsWhenDeviceIsCreatedThenIsSimula TEST(DeviceCreation, givenDeviceWhenItIsCreatedThenOsContextIsRegistredInMemoryManager) { auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(nullptr)); auto memoryManager = device->getMemoryManager(); - auto numEnginesForDevice = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances().size(); + auto &hwInfo = device->getHardwareInfo(); + auto numEnginesForDevice = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo).size(); if (device->getNumAvailableDevices() > 1) { numEnginesForDevice *= device->getNumAvailableDevices(); numEnginesForDevice += device->engines.size(); @@ -195,7 +201,8 @@ TEST(DeviceCreation, givenMultiRootDeviceWhenTheyAreCreatedThenEachOsContextHasU ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); const size_t numDevices = 2; executionEnvironment->prepareRootDeviceEnvironments(numDevices); - const auto &numGpgpuEngines = static_cast(HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances().size()); + auto hwInfo = executionEnvironment->getHardwareInfo(); + const auto &numGpgpuEngines = static_cast(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo).size()); auto device1 = std::unique_ptr(Device::create(executionEnvironment, 0u)); auto device2 = std::unique_ptr(Device::create(executionEnvironment, 1u)); @@ -232,7 +239,8 @@ TEST(DeviceCreation, givenMultiRootDeviceWhenTheyAreCreatedThenEachDeviceHasSepe ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); const size_t numDevices = 2; executionEnvironment->prepareRootDeviceEnvironments(numDevices); - const auto &numGpgpuEngines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances().size(); + auto hwInfo = executionEnvironment->getHardwareInfo(); + const auto &numGpgpuEngines = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo).size(); auto device1 = std::unique_ptr(Device::create(executionEnvironment, 0u)); auto device2 = std::unique_ptr(Device::create(executionEnvironment, 1u)); @@ -244,12 +252,15 @@ TEST(DeviceCreation, givenMultiRootDeviceWhenTheyAreCreatedThenEachDeviceHasSepe } } -TEST(DeviceCreation, givenDeviceWhenAskingForDefaultEngineThenReturnValidValue) { +HWTEST_F(DeviceTest, givenDeviceWhenAskingForDefaultEngineThenReturnValidValue) { ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); + auto &hwHelper = HwHelperHw::get(); + hwHelper.adjustDefaultEngineType(executionEnvironment->getMutableHardwareInfo()); + auto device = std::unique_ptr(Device::create(executionEnvironment, 0)); auto osContext = device->getDefaultEngine().osContext; - EXPECT_EQ(platformDevices[0]->capabilityTable.defaultEngineType, osContext->getEngineType()); + EXPECT_EQ(executionEnvironment->getHardwareInfo()->capabilityTable.defaultEngineType, osContext->getEngineType()); EXPECT_FALSE(osContext->isLowPriority()); } diff --git a/opencl/test/unit_test/device/sub_device_tests.cpp b/opencl/test/unit_test/device/sub_device_tests.cpp index abe9f8cb63..4acee45d7e 100644 --- a/opencl/test/unit_test/device/sub_device_tests.cpp +++ b/opencl/test/unit_test/device/sub_device_tests.cpp @@ -170,7 +170,7 @@ TEST(SubDevicesTest, givenSubDevicesWhenGettingDeviceByIdZeroThenGetThisSubDevic TEST(RootDevicesTest, givenRootDeviceWithoutSubdevicesWhenCreateEnginesThenDeviceCreatesCorrectNumberOfEngines) { auto hwInfo = *platformDevices[0]; - auto &gpgpuEngines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(); + auto &gpgpuEngines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo); auto executionEnvironment = new MockExecutionEnvironment; MockDevice device(executionEnvironment, 0); diff --git a/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp b/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp index 0698e4d1ca..2f1c5e4595 100644 --- a/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp +++ b/opencl/test/unit_test/execution_environment/execution_environment_tests.cpp @@ -231,9 +231,10 @@ TEST(ExecutionEnvironment, whenCalculateMaxOsContexCountThenGlobalVariableHasPro auto expectedOsContextCount = 0u; for (const auto &rootDeviceEnvironment : executionEnvironment.rootDeviceEnvironments) { - auto &hwHelper = HwHelper::get(rootDeviceEnvironment->getHardwareInfo()->platform.eRenderCoreFamily); - auto osContextCount = hwHelper.getGpgpuEngineInstances().size(); - auto subDevicesCount = HwHelper::getSubDevicesCount(rootDeviceEnvironment->getHardwareInfo()); + auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); + auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily); + auto osContextCount = hwHelper.getGpgpuEngineInstances(*hwInfo).size(); + auto subDevicesCount = HwHelper::getSubDevicesCount(hwInfo); bool hasRootCsr = subDevicesCount > 1; expectedOsContextCount += static_cast(osContextCount * subDevicesCount + hasRootCsr); } diff --git a/opencl/test/unit_test/fixtures/memory_allocator_fixture.h b/opencl/test/unit_test/fixtures/memory_allocator_fixture.h index 5989571cda..9044ff0bd9 100644 --- a/opencl/test/unit_test/fixtures/memory_allocator_fixture.h +++ b/opencl/test/unit_test/fixtures/memory_allocator_fixture.h @@ -29,7 +29,8 @@ class MemoryAllocatorFixture : public MemoryManagementFixture { memoryManager = new MockMemoryManager(false, false, *executionEnvironment); executionEnvironment->memoryManager.reset(memoryManager); csr = &device->getGpgpuCommandStreamReceiver(); - auto engineType = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; + auto &hwInfo = device->getHardwareInfo(); + auto engineType = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo)[0]; auto osContext = memoryManager->createAndRegisterOsContext(csr, engineType, 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); csr->setupContext(*osContext); } diff --git a/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp b/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp index 3fc3467675..621c0f2dab 100644 --- a/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp +++ b/opencl/test/unit_test/fixtures/memory_manager_fixture.cpp @@ -23,8 +23,9 @@ void MemoryManagerWithCsrFixture::SetUp() { memoryManager = new MockMemoryManager(executionEnvironment); executionEnvironment.memoryManager.reset(memoryManager); csr->tagAddress = ¤tGpuTag; - auto engine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; - auto osContext = memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment.getHardwareInfo(); + auto engine = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + auto osContext = memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csr->setupContext(*osContext); } diff --git a/opencl/test/unit_test/gen11/hw_helper_tests_gen11.cpp b/opencl/test/unit_test/gen11/hw_helper_tests_gen11.cpp index b8685fd266..c696803943 100644 --- a/opencl/test/unit_test/gen11/hw_helper_tests_gen11.cpp +++ b/opencl/test/unit_test/gen11/hw_helper_tests_gen11.cpp @@ -43,6 +43,6 @@ GEN11TEST_F(HwHelperTestGen11, givenGen11PlatformWhenSetupHardwareCapabilitiesIs } GEN11TEST_F(HwHelperTestGen11, whenGetGpgpuEnginesThenReturnThreeRcsEngines) { - whenGetGpgpuEnginesThenReturnTwoRcsEngines(); + whenGetGpgpuEnginesThenReturnTwoRcsEngines(pDevice->getHardwareInfo()); EXPECT_EQ(3u, pDevice->engines.size()); } 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 d535edd354..3a63780ec8 100644 --- a/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl +++ b/opencl/test/unit_test/gen12lp/hw_helper_tests_gen12lp.inl @@ -104,9 +104,43 @@ GEN12LPTEST_F(HwHelperTestGen12Lp, givenDifferentSizesOfAllocationWhenCheckingCo } } -GEN12LPTEST_F(HwHelperTestGen12Lp, whenGetGpgpuEnginesThenReturnThreeRcsEnginesAndCcsEngine) { - EXPECT_EQ(4u, pDevice->engines.size()); - auto &engines = HwHelperHw::get().getGpgpuEngineInstances(); +GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeNotSetWhenGetGpgpuEnginesThenReturnThreeRcsEngines) { + HardwareInfo hwInfo = *platformDevices[0]; + hwInfo.featureTable.ftrCCSNode = false; + hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_RCS; + + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0)); + EXPECT_EQ(3u, device->engines.size()); + auto &engines = HwHelperHw::get().getGpgpuEngineInstances(hwInfo); + EXPECT_EQ(3u, 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]); +} + +GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetWhenGetGpgpuEnginesThenReturnTwoRcsAndCcsEngines) { + HardwareInfo hwInfo = *platformDevices[0]; + hwInfo.featureTable.ftrCCSNode = true; + hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_CCS; + + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0)); + 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]); +} + +GEN12LPTEST_F(HwHelperTestGen12Lp, givenFtrCcsNodeSetAndDefaultRcsWhenGetGpgpuEnginesThenReturnThreeRcsAndCcsEngines) { + HardwareInfo hwInfo = *platformDevices[0]; + hwInfo.featureTable.ftrCCSNode = true; + hwInfo.capabilityTable.defaultEngineType = aub_stream::ENGINE_RCS; + + auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0)); + 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]); diff --git a/opencl/test/unit_test/gen8/hw_helper_tests_gen8.cpp b/opencl/test/unit_test/gen8/hw_helper_tests_gen8.cpp index afd5bc32da..ac9a77ce67 100644 --- a/opencl/test/unit_test/gen8/hw_helper_tests_gen8.cpp +++ b/opencl/test/unit_test/gen8/hw_helper_tests_gen8.cpp @@ -50,6 +50,6 @@ GEN8TEST_F(HwHelperTestGen8, givenGen8PlatformWhenSetupHardwareCapabilitiesIsCal } GEN8TEST_F(HwHelperTestGen8, whenGetGpgpuEnginesThenReturnTwoThreeEngines) { - whenGetGpgpuEnginesThenReturnTwoRcsEngines(); + whenGetGpgpuEnginesThenReturnTwoRcsEngines(pDevice->getHardwareInfo()); EXPECT_EQ(3u, pDevice->engines.size()); } diff --git a/opencl/test/unit_test/gen9/hw_helper_tests_gen9.cpp b/opencl/test/unit_test/gen9/hw_helper_tests_gen9.cpp index b86a5af320..87f93ed296 100644 --- a/opencl/test/unit_test/gen9/hw_helper_tests_gen9.cpp +++ b/opencl/test/unit_test/gen9/hw_helper_tests_gen9.cpp @@ -50,6 +50,6 @@ GEN9TEST_F(HwHelperTestGen9, givenDebuggingActiveWhenSipKernelTypeIsQueriedThenD } GEN9TEST_F(HwHelperTestGen9, whenGetGpgpuEnginesThenReturnThreeRcsEngines) { - whenGetGpgpuEnginesThenReturnTwoRcsEngines(); + whenGetGpgpuEnginesThenReturnTwoRcsEngines(pDevice->getHardwareInfo()); EXPECT_EQ(3u, pDevice->engines.size()); } 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 5bfebb6933..c5d79c5852 100644 --- a/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl +++ b/opencl/test/unit_test/helpers/get_gpgpu_engines_tests.inl @@ -12,8 +12,8 @@ using namespace NEO; template -void whenGetGpgpuEnginesThenReturnTwoRcsEngines() { - auto gpgpuEngines = HwHelperHw::get().getGpgpuEngineInstances(); +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]); 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 b77f2c1fdf..45d974a7f4 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -198,7 +198,8 @@ TEST_F(MemoryAllocatorTest, allocateSystemAligned) { TEST_F(MemoryAllocatorTest, allocateGraphics) { unsigned int alignment = 4096; - memoryManager->createAndRegisterOsContext(csr, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + memoryManager->createAndRegisterOsContext(csr, + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); auto allocation = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); @@ -1407,7 +1408,8 @@ TEST_F(MemoryManagerWithCsrTest, givenAllocationThatWasUsedAndIsCompletedWhenche } TEST_F(MemoryManagerWithCsrTest, givenAllocationThatWasUsedAndIsNotCompletedWhencheckGpuUsageAndDestroyGraphicsAllocationsIsCalledThenItIsAddedToTemporaryAllocationList) { - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); auto usedAllocationAndNotGpuCompleted = memoryManager->allocateGraphicsMemoryWithProperties(MockAllocationProperties{MemoryConstants::pageSize}); @@ -1657,7 +1659,8 @@ TEST(ResidencyDataTest, givenOsContextWhenItIsRegisteredToMemoryManagerThenRefCo auto memoryManager = new MockMemoryManager(false, false, executionEnvironment); executionEnvironment.memoryManager.reset(memoryManager); std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); EXPECT_EQ(1u, memoryManager->getRegisteredEnginesCount()); EXPECT_EQ(1, memoryManager->registeredEngines[0].osContext->getRefInternalCount()); @@ -1684,7 +1687,8 @@ TEST(ResidencyDataTest, givenDeviceBitfieldWhenCreatingOsContextThenSetValidValu std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); DeviceBitfield deviceBitfield = 0b11; PreemptionMode preemptionMode = PreemptionMode::MidThread; - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], deviceBitfield, preemptionMode, false); EXPECT_EQ(2u, memoryManager->registeredEngines[0].osContext->getNumSupportedDevices()); EXPECT_EQ(deviceBitfield, memoryManager->registeredEngines[0].osContext->getDeviceBitfield()); @@ -1697,9 +1701,11 @@ TEST(ResidencyDataTest, givenTwoOsContextsWhenTheyAreRegisteredFromHigherToLower executionEnvironment.memoryManager.reset(memoryManager); std::unique_ptr csr(createCommandStream(executionEnvironment, 0u)); std::unique_ptr csr1(createCommandStream(executionEnvironment, 1u)); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); - memoryManager->createAndRegisterOsContext(csr1.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[1], + memoryManager->createAndRegisterOsContext(csr1.get(), + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[1], 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); EXPECT_EQ(2u, memoryManager->getRegisteredEnginesCount()); EXPECT_EQ(1, memoryManager->registeredEngines[0].osContext->getRefInternalCount()); @@ -1707,7 +1713,7 @@ TEST(ResidencyDataTest, givenTwoOsContextsWhenTheyAreRegisteredFromHigherToLower } TEST(ResidencyDataTest, givenGpgpuEnginesWhenAskedForMaxOsContextCountThenValueIsGreaterOrEqual) { - auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(); + auto &engines = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0]); EXPECT_TRUE(MemoryManager::maxOsContextCount >= engines.size()); } @@ -1718,8 +1724,12 @@ TEST(ResidencyDataTest, givenResidencyDataWhenUpdateCompletionDataIsCalledThenIt MockResidencyData residency; - MockOsContext osContext(0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); - MockOsContext osContext2(1u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[1], PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + MockOsContext osContext(0u, 1, + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], + PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + MockOsContext osContext2(1u, 1, + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[1], + PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); auto lastFenceValue = 45llu; auto lastFenceValue2 = 23llu; diff --git a/opencl/test/unit_test/memory_manager/surface_tests.cpp b/opencl/test/unit_test/memory_manager/surface_tests.cpp index 95310aadf5..c5b0ea8690 100644 --- a/opencl/test/unit_test/memory_manager/surface_tests.cpp +++ b/opencl/test/unit_test/memory_manager/surface_tests.cpp @@ -64,8 +64,9 @@ HWTEST_TYPED_TEST(SurfaceTest, GivenSurfaceWhenInterfaceIsUsedThenSurfaceBehaves ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); executionEnvironment->initializeMemoryManager(); auto csr = std::make_unique>(execStamp, *executionEnvironment, 0); - auto engine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; - auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + auto engine = HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + auto osContext = executionEnvironment->memoryManager->createAndRegisterOsContext(csr.get(), engine, 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csr->setupContext(*osContext); Surface *surface = createSurface::Create(this->data, diff --git a/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h b/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h index 24ed115e48..cc0d4015e3 100644 --- a/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h +++ b/opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h @@ -331,7 +331,7 @@ class DrmMockCustom : public Drm { DrmMockCustom() : Drm(std::make_unique(mockFd), *constructPlatform()->peekExecutionEnvironment()->rootDeviceEnvironments[0]) { reset(); - ioctl_expected.contextCreate = static_cast(NEO::HwHelper::get(NEO::platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances().size()); + ioctl_expected.contextCreate = static_cast(NEO::HwHelper::get(NEO::platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*NEO::platformDevices[0]).size()); ioctl_expected.contextDestroy = ioctl_expected.contextCreate.load(); } int getErrno() override { 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 006d933c3c..66ecdb281e 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 @@ -36,8 +36,9 @@ class DrmCommandStreamTest : public ::testing::Test { executionEnvironment.rootDeviceEnvironments[0]->osInterface = std::make_unique(); executionEnvironment.rootDeviceEnvironments[0]->osInterface->get()->setDrm(mock); - osContext = std::make_unique(*mock, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], - PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment.getHardwareInfo(); + osContext = std::make_unique(*mock, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csr = new DrmCommandStreamReceiver(executionEnvironment, 0, gemCloseWorkerMode::gemCloseWorkerActive); ASSERT_NE(nullptr, csr); 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 e12599320b..2f59046a58 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 @@ -212,7 +212,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamTest, givenDrmContextIdWhenFlushingThenSetIdT .RetiresOnSaturation(); osContext = std::make_unique(*mock, 1, 1, - HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); csr->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 f415ecb4c8..7ed3a5f244 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 @@ -248,7 +248,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(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csr->setupContext(osContext); @@ -273,7 +273,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(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], + OsContextWin osContext(*wddm, 0u, 1, HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); csr->setupContext(osContext); diff --git a/opencl/test/unit_test/os_interface/windows/gl/gl_os_sharing_tests.cpp b/opencl/test/unit_test/os_interface/windows/gl/gl_os_sharing_tests.cpp index da254f14a2..862423e840 100644 --- a/opencl/test/unit_test/os_interface/windows/gl/gl_os_sharing_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/gl/gl_os_sharing_tests.cpp @@ -332,7 +332,8 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza FailSignalSyncObjectMock::reset(); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]); wddm->init(); - OsContextWin osContext(*osInterface.get()->getWddm(), 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + OsContextWin osContext(*osInterface.get()->getWddm(), 0u, 1, + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], preemptionMode, false); CL_GL_SYNC_INFO syncInfo = {}; syncInfo.serverSynchronizationObject = 0x5cU; @@ -391,7 +392,8 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza FailSignalSyncObjectMock::reset(); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]); wddm->init(); - OsContextWin osContext(*osInterface.get()->getWddm(), 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + OsContextWin osContext(*osInterface.get()->getWddm(), 0u, 1, + HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], preemptionMode, false); CL_GL_SYNC_INFO syncInfo = {}; syncInfo.submissionSynchronizationObject = 0x7cU; 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 004a8d6e9e..cd3487c50f 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(*platformDevices[0]); - engineType = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; + engineType = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0]; 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 c6fd386127..25d5f8431e 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 @@ -33,7 +33,7 @@ TEST(OsContextTest, givenWddmWhenCreateOsContextAfterInitWddmThenOsContextIsInit auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]); wddm->init(); EXPECT_EQ(0u, wddm->registerTrimCallbackResult.called); - auto osContext = std::make_unique(*wddm, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + auto osContext = std::make_unique(*wddm, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], preemptionMode, false); EXPECT_TRUE(osContext->isInitialized()); EXPECT_EQ(osContext->getWddm(), wddm); EXPECT_EQ(1u, wddm->registerTrimCallbackResult.called); 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 f2d23890b5..3f38682c60 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp @@ -580,7 +580,7 @@ TEST_F(Wddm20WithMockGdiDllTestsWithoutWddmInit, givenUseNoRingFlushesKmdModeDeb TEST_F(Wddm20WithMockGdiDllTestsWithoutWddmInit, givenEngineTypeWhenCreatingContextThenPassCorrectNodeOrdinal) { init(); auto createContextParams = this->getCreateContextDataFcn(); - UINT expected = WddmEngineMapper::engineNodeMap(HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]); + UINT expected = WddmEngineMapper::engineNodeMap(HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0]); 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 0aba129ae6..4344914719 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp @@ -42,7 +42,7 @@ struct Wddm23TestsWithoutWddmInit : public ::testing::Test, GdiDllFixture { wddmMockInterface = static_cast(wddm->wddmInterface.release()); wddm->init(); wddm->wddmInterface.reset(wddmMockInterface); - osContext = std::make_unique(*wddm, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + osContext = std::make_unique(*wddm, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0], preemptionMode, false); } void TearDown() override { @@ -74,7 +74,7 @@ TEST_F(Wddm23Tests, whenCreateContextIsCalledThenEnableHwQueues) { } TEST_F(Wddm23Tests, givenPreemptionModeWhenCreateHwQueueCalledThenSetGpuTimeoutIfEnabled) { - auto defaultEngine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0]; + auto defaultEngine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*platformDevices[0])[0]; OsContextWin osContextWithoutPreemption(*osInterface->get()->getWddm(), 0u, 1, defaultEngine, PreemptionMode::Disabled, false); OsContextWin osContextWithPreemption(*osInterface->get()->getWddm(), 0u, 1, defaultEngine, PreemptionMode::MidBatch, false); 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 cd9636f5c4..f771e5caab 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_fixture.h +++ b/opencl/test/unit_test/os_interface/windows/wddm_fixture.h @@ -40,7 +40,9 @@ struct WddmFixture : ::testing::Test { wddm->resetGdi(gdi); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]); wddm->init(); - osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1u, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + auto engine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1u, engine, preemptionMode, false); mockTemporaryResources = static_cast(wddm->temporaryResources.get()); } @@ -71,7 +73,10 @@ struct WddmFixtureWithMockGdiDll : public GdiDllFixture { wddmMockInterface = static_cast(wddm->wddmInterface.release()); wddm->init(); wddm->wddmInterface.reset(wddmMockInterface); - osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + + auto hwInfo = executionEnvironment->getHardwareInfo(); + auto engine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + osContext = std::make_unique(*osInterface->get()->getWddm(), 0u, 1, engine, preemptionMode, false); } void TearDown() override { 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 83baf4507c..d76dea0c3e 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 @@ -351,8 +351,9 @@ TEST_F(WddmMemoryManagerSimpleTest, givenNonZeroFenceValuesOnMultipleEnginesRegi executionEnvironment->rootDeviceEnvironments[1]->osInterface->get()->setWddm(wddm2); executionEnvironment->rootDeviceEnvironments[1]->memoryOperationsInterface = std::make_unique(wddm2); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[1], - 2, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1], + 2, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); ASSERT_EQ(2u, memoryManager->getRegisteredEnginesCount()); auto allocation = static_cast(memoryManager->allocateGraphicsMemoryWithProperties({0, 32, GraphicsAllocation::AllocationType::BUFFER})); @@ -380,8 +381,9 @@ TEST_F(WddmMemoryManagerSimpleTest, givenNonZeroFenceValueOnSomeOfMultipleEngine executionEnvironment->rootDeviceEnvironments[1]->osInterface->get()->setWddm(wddm2); executionEnvironment->rootDeviceEnvironments[1]->memoryOperationsInterface = std::make_unique(wddm2); - memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[1], - 2, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[1], + 2, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); ASSERT_EQ(2u, memoryManager->getRegisteredEnginesCount()); auto allocation = static_cast(memoryManager->allocateGraphicsMemoryWithProperties({0, 32, GraphicsAllocation::AllocationType::BUFFER})); 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 89ba5cc83e..2aaddd184e 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 @@ -62,8 +62,10 @@ class MockWddmMemoryManagerFixture { memoryManager = std::make_unique(*executionEnvironment); csr.reset(createCommandStream(*executionEnvironment, 0u)); - osContext = memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], - 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + osContext = memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); osContext->incRefInternal(); mockTemporaryResources = reinterpret_cast(wddm->getTemporaryResourcesContainer()); @@ -113,7 +115,9 @@ class WddmMemoryManagerFixtureWithGmockWddm : public ExecutionEnvironmentFixture //assert we have memory manager ASSERT_NE(nullptr, memoryManager); csr.reset(createCommandStream(*executionEnvironment, 0u)); - osContext = memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], 1, preemptionMode, false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + osContext = memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], 1, preemptionMode, 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 a8db3a261e..8f0deb839f 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 @@ -127,7 +127,9 @@ struct WddmResidencyControllerWithMockWddmTest : public WddmResidencyControllerT memoryManager = std::make_unique(*executionEnvironment); csr.reset(createCommandStream(*executionEnvironment, 0u)); - osContext = memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], 1, preemptionMode, false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + osContext = memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], 1, preemptionMode, false); osContext->incRefInternal(); residencyController = &static_cast(osContext)->getResidencyController(); @@ -162,8 +164,10 @@ struct WddmResidencyControllerWithGdiAndMemoryManagerTest : ::testing::Test { memoryManager = std::make_unique(*executionEnvironment); csr.reset(createCommandStream(*executionEnvironment, 0u)); - osContext = memoryManager->createAndRegisterOsContext(csr.get(), HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], - 1, PreemptionHelper::getDefaultPreemptionMode(*platformDevices[0]), false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + osContext = memoryManager->createAndRegisterOsContext(csr.get(), + HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], + 1, PreemptionHelper::getDefaultPreemptionMode(*hwInfo), false); osContext->incRefInternal(); diff --git a/opencl/test/unit_test/profiling/profiling_tests.cpp b/opencl/test/unit_test/profiling/profiling_tests.cpp index c7733e63e0..6fc712ba04 100644 --- a/opencl/test/unit_test/profiling/profiling_tests.cpp +++ b/opencl/test/unit_test/profiling/profiling_tests.cpp @@ -522,22 +522,36 @@ TEST(EventProfilingTest, givenRawTimestampsDebugModeWhenDataIsQueriedThenRawData event.timeStampNode = nullptr; } -struct ProfilingWithPerfCountersTests : public ProfilingTests, - public PerformanceCountersFixture { +struct ProfilingWithPerfCountersTests : public PerformanceCountersFixture, ::testing::Test { void SetUp() override { PerformanceCountersFixture::SetUp(); - ProfilingTests::SetUp(); createPerfCounters(); + + HardwareInfo hwInfo = *platformDevices[0]; + if (hwInfo.capabilityTable.defaultEngineType == aub_stream::EngineType::ENGINE_CCS) { + hwInfo.featureTable.ftrCCSNode = true; + } + + pDevice = MockDevice::createWithNewExecutionEnvironment(&hwInfo, 0); + pClDevice = std::make_unique(*pDevice, nullptr); + pDevice->setPerfCounters(performanceCountersBase.release()); + + context = std::make_unique(pClDevice.get()); + + cl_int retVal = CL_SUCCESS; + cl_queue_properties properties[] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0}; + pCmdQ.reset(CommandQueue::create(context.get(), pClDevice.get(), properties, false, retVal)); + + kernel = std::make_unique(*pClDevice); } void TearDown() override { - ProfilingTests::TearDown(); PerformanceCountersFixture::TearDown(); } template - GenCmdList::iterator expectStoreRegister(GenCmdList::iterator itor, uint64_t memoryAddress, uint32_t registerAddress) { + GenCmdList::iterator expectStoreRegister(const GenCmdList &cmdList, GenCmdList::iterator itor, uint64_t memoryAddress, uint32_t registerAddress) { using MI_STORE_REGISTER_MEM = typename GfxFamily::MI_STORE_REGISTER_MEM; itor = find(itor, cmdList.end()); @@ -548,6 +562,12 @@ struct ProfilingWithPerfCountersTests : public ProfilingTests, itor++; return itor; } + + MockDevice *pDevice = nullptr; + std::unique_ptr pClDevice; + std::unique_ptr context; + std::unique_ptr pCmdQ; + std::unique_ptr kernel; }; HWTEST_F(ProfilingWithPerfCountersTests, @@ -582,26 +602,17 @@ HWCMDTEST_F(IGFX_GEN8_CORE, ProfilingWithPerfCountersTests, GIVENCommandQueueWit pCmdQ->setPerfCountersEnabled(); - MockKernel kernel(program.get(), kernelInfo, *pClDevice); - ASSERT_EQ(CL_SUCCESS, kernel.initialize()); - size_t globalOffsets[3] = {0, 0, 0}; size_t workItems[3] = {1, 1, 1}; uint32_t dimensions = 1; cl_event event; - cl_kernel clKernel = &kernel; + cl_kernel clKernel = kernel->mockKernel; - static_cast *>(pCmdQ)->enqueueKernel( - clKernel, - dimensions, - globalOffsets, - workItems, - nullptr, - 0, - nullptr, - &event); + static_cast *>(pCmdQ.get())->enqueueKernel(clKernel, dimensions, globalOffsets, workItems, nullptr, 0, nullptr, &event); - parseCommands(*pCmdQ); + HardwareParse parse; + auto &cmdList = parse.cmdList; + parse.parseCommands(*pCmdQ); // expect MI_REPORT_PERF_COUNT before WALKER auto itorBeforeReportPerf = find(cmdList.begin(), cmdList.end()); @@ -643,26 +654,17 @@ HWCMDTEST_F(IGFX_GEN8_CORE, ProfilingWithPerfCountersTests, GIVENCommandQueueWit pCmdQ->setPerfCountersEnabled(); - MockKernel kernel(program.get(), kernelInfo, *pClDevice); - ASSERT_EQ(CL_SUCCESS, kernel.initialize()); - size_t globalOffsets[3] = {0, 0, 0}; size_t workItems[3] = {1, 1, 1}; uint32_t dimensions = 1; cl_event event; - cl_kernel clKernel = &kernel; + cl_kernel clKernel = kernel->mockKernel; - static_cast *>(pCmdQ)->enqueueKernel( - clKernel, - dimensions, - globalOffsets, - workItems, - nullptr, - 0, - nullptr, - &event); + static_cast *>(pCmdQ.get())->enqueueKernel(clKernel, dimensions, globalOffsets, workItems, nullptr, 0, nullptr, &event); - parseCommands(*pCmdQ); + HardwareParse parse; + auto &cmdList = parse.cmdList; + parse.parseCommands(*pCmdQ); // expect MI_REPORT_PERF_COUNT before WALKER auto itorBeforeReportPerf = find(cmdList.begin(), cmdList.end()); @@ -704,30 +706,26 @@ HWCMDTEST_F(IGFX_GEN8_CORE, ProfilingWithPerfCountersTests, GIVENCommandQueueBlo pCmdQ->setPerfCountersEnabled(); - MockKernel kernel(program.get(), kernelInfo, *pClDevice); - ASSERT_EQ(CL_SUCCESS, kernel.initialize()); - size_t globalOffsets[3] = {0, 0, 0}; size_t workItems[3] = {1, 1, 1}; uint32_t dimensions = 1; cl_event event; cl_event ue = new UserEvent(); - static_cast *>(pCmdQ)->enqueueKernel( - &kernel, - dimensions, - globalOffsets, - workItems, - nullptr, - 1, // one user event to block queue - &ue, // user event not signaled - &event); + cl_kernel clKernel = kernel->mockKernel; + static_cast *>(pCmdQ.get())->enqueueKernel(clKernel, dimensions, globalOffsets, workItems, nullptr, + 1, // one user event to block queue + &ue, // user event not signaled + &event); //rseCommands(*pCmdQ); ASSERT_NE(nullptr, pCmdQ->virtualEvent); ASSERT_NE(nullptr, pCmdQ->virtualEvent->peekCommand()); NEO::LinearStream *eventCommandStream = pCmdQ->virtualEvent->peekCommand()->getCommandStream(); ASSERT_NE(nullptr, eventCommandStream); - parseCommands(*eventCommandStream); + + HardwareParse parse; + auto &cmdList = parse.cmdList; + parse.parseCommands(*eventCommandStream); // expect MI_REPORT_PERF_COUNT before WALKER auto itorBeforeReportPerf = find(cmdList.begin(), cmdList.end()); @@ -768,25 +766,16 @@ HWTEST_F(ProfilingWithPerfCountersTests, pCmdQ->setPerfCountersEnabled(); - MockKernel kernel(program.get(), kernelInfo, *pClDevice); - ASSERT_EQ(CL_SUCCESS, kernel.initialize()); - size_t globalOffsets[3] = {0, 0, 0}; size_t workItems[3] = {1, 1, 1}; uint32_t dimensions = 1; - cl_kernel clKernel = &kernel; + cl_kernel clKernel = kernel->mockKernel; - static_cast *>(pCmdQ)->enqueueKernel( - clKernel, - dimensions, - globalOffsets, - workItems, - nullptr, - 0, - nullptr, - nullptr); + static_cast *>(pCmdQ.get())->enqueueKernel(clKernel, dimensions, globalOffsets, workItems, nullptr, 0, nullptr, nullptr); - parseCommands(*pCmdQ); + HardwareParse parse; + auto &cmdList = parse.cmdList; + parse.parseCommands(*pCmdQ); // expect no MI_REPORT_PERF_COUNT before WALKER auto itorBeforeReportPerf = find(cmdList.begin(), cmdList.end()); @@ -842,34 +831,25 @@ HWTEST_F(ProfilingWithPerfCountersTests, GIVENCommandQueueWithProfilingPerfCount pCmdQ->setPerfCountersEnabled(); - MockKernel kernel(program.get(), kernelInfo, *pClDevice); - ASSERT_EQ(CL_SUCCESS, kernel.initialize()); - size_t globalOffsets[3] = {0, 0, 0}; size_t workItems[3] = {1, 1, 1}; uint32_t dimensions = 1; cl_event event; - cl_kernel clKernel = &kernel; + cl_kernel clKernel = kernel->mockKernel; - static_cast *>(pCmdQ)->enqueueKernel( - clKernel, - dimensions, - globalOffsets, - workItems, - nullptr, - 0, - nullptr, - &event); + static_cast *>(pCmdQ.get())->enqueueKernel(clKernel, dimensions, globalOffsets, workItems, nullptr, 0, nullptr, &event); auto pEvent = static_cast *>(event); EXPECT_EQ(pEvent->getHwTimeStampNode()->getGpuAddress(), timeStampGpuAddress); EXPECT_EQ(pEvent->getHwPerfCounterNode()->getGpuAddress(), perfCountersGpuAddress); - parseCommands(*pCmdQ); + HardwareParse parse; + auto &cmdList = parse.cmdList; + parse.parseCommands(*pCmdQ); - auto itor = expectStoreRegister(cmdList.begin(), timeStampGpuAddress + offsetof(HwTimeStamps, ContextStartTS), GP_THREAD_TIME_REG_ADDRESS_OFFSET_LOW); + auto itor = expectStoreRegister(cmdList, cmdList.begin(), timeStampGpuAddress + offsetof(HwTimeStamps, ContextStartTS), GP_THREAD_TIME_REG_ADDRESS_OFFSET_LOW); // after WALKER: - itor = expectStoreRegister(itor, timeStampGpuAddress + offsetof(HwTimeStamps, ContextEndTS), GP_THREAD_TIME_REG_ADDRESS_OFFSET_LOW); + itor = expectStoreRegister(cmdList, itor, timeStampGpuAddress + offsetof(HwTimeStamps, ContextEndTS), GP_THREAD_TIME_REG_ADDRESS_OFFSET_LOW); EXPECT_TRUE(pEvent->calcProfilingData()); diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index e29a9ad9c2..feb0655c22 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -93,7 +93,7 @@ bool Device::createDeviceImpl() { bool Device::createEngines() { auto &hwInfo = getHardwareInfo(); - auto &gpgpuEngines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(); + auto gpgpuEngines = HwHelper::get(hwInfo.platform.eRenderCoreFamily).getGpgpuEngineInstances(hwInfo); for (uint32_t deviceCsrIndex = 0; deviceCsrIndex < gpgpuEngines.size(); deviceCsrIndex++) { if (!createEngine(deviceCsrIndex, gpgpuEngines[deviceCsrIndex])) { @@ -117,9 +117,6 @@ bool Device::createEngine(uint32_t deviceCsrIndex, aub_stream::EngineType engine } bool internalUsage = (deviceCsrIndex == HwHelper::internalUsageEngineIndex); - if (internalUsage) { - engineType = defaultEngineType; - } if (commandStreamReceiver->needsPageTableManager(engineType)) { commandStreamReceiver->createPageTableManager(); diff --git a/shared/source/execution_environment/execution_environment.cpp b/shared/source/execution_environment/execution_environment.cpp index 1e039c7f42..d3c0fa748c 100644 --- a/shared/source/execution_environment/execution_environment.cpp +++ b/shared/source/execution_environment/execution_environment.cpp @@ -73,9 +73,10 @@ void ExecutionEnvironment::initDebugger() { void ExecutionEnvironment::calculateMaxOsContextCount() { for (const auto &rootDeviceEnvironment : this->rootDeviceEnvironments) { - auto &hwHelper = HwHelper::get(rootDeviceEnvironment->getHardwareInfo()->platform.eRenderCoreFamily); - auto osContextCount = hwHelper.getGpgpuEngineInstances().size(); - auto subDevicesCount = HwHelper::getSubDevicesCount(rootDeviceEnvironment->getHardwareInfo()); + auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); + auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily); + auto osContextCount = hwHelper.getGpgpuEngineInstances(*hwInfo).size(); + auto subDevicesCount = HwHelper::getSubDevicesCount(hwInfo); bool hasRootCsr = subDevicesCount > 1; MemoryManager::maxOsContextCount += static_cast(osContextCount * subDevicesCount + hasRootCsr); diff --git a/shared/source/helpers/hw_helper.h b/shared/source/helpers/hw_helper.h index 06e47ada04..f1095f2805 100644 --- a/shared/source/helpers/hw_helper.h +++ b/shared/source/helpers/hw_helper.h @@ -26,6 +26,7 @@ class GmmHelper; class HwHelper { public: + 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; @@ -61,7 +62,7 @@ class HwHelper { bool isReadOnly, uint32_t surfaceType, bool forceNonAuxMode) = 0; - virtual const std::vector getGpgpuEngineInstances() const = 0; + virtual const EngineInstancesContainer getGpgpuEngineInstances(const HardwareInfo &hwInfo) const = 0; virtual const StackVec getDeviceSubGroupSizes() const = 0; virtual bool getEnableLocalMemory(const HardwareInfo &hwInfo) const = 0; virtual std::string getExtensions() const = 0; @@ -171,7 +172,7 @@ class HwHelperHw : public HwHelper { uint32_t surfaceType, bool forceNonAuxMode) override; - const std::vector getGpgpuEngineInstances() const override; + const EngineInstancesContainer getGpgpuEngineInstances(const HardwareInfo &hwInfo) const override; const StackVec getDeviceSubGroupSizes() const override; diff --git a/shared/source/helpers/hw_helper_bdw_plus.inl b/shared/source/helpers/hw_helper_bdw_plus.inl index 6173c65e19..7fedc748ed 100644 --- a/shared/source/helpers/hw_helper_bdw_plus.inl +++ b/shared/source/helpers/hw_helper_bdw_plus.inl @@ -41,11 +41,10 @@ bool HwHelperHw::timestampPacketWriteSupported() const { } template -const std::vector HwHelperHw::getGpgpuEngineInstances() const { - constexpr std::array gpgpuEngineInstances = {{aub_stream::ENGINE_RCS, - aub_stream::ENGINE_RCS, // low priority - aub_stream::ENGINE_RCS}}; // internal usage - return std::vector(gpgpuEngineInstances.begin(), gpgpuEngineInstances.end()); +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 } 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 f27d4bce66..d8da463218 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 @@ -41,7 +41,9 @@ class WddmPreemptionTests : public Test { regReader->forceRetValue = forceReturnPreemptionRegKeyValue; auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(hwInfoTest); wddm->init(); - osContext = std::make_unique(*wddm, 0u, 1, HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances()[0], preemptionMode, false); + auto hwInfo = executionEnvironment->getHardwareInfo(); + auto engine = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; + osContext = std::make_unique(*wddm, 0u, 1, engine, preemptionMode, false); } DebugManagerStateRestore *dbgRestorer = nullptr; diff --git a/shared/test/unit_test/preemption/preemption_tests.cpp b/shared/test/unit_test/preemption/preemption_tests.cpp index 436c70c57e..d9228140fd 100644 --- a/shared/test/unit_test/preemption/preemption_tests.cpp +++ b/shared/test/unit_test/preemption/preemption_tests.cpp @@ -539,7 +539,8 @@ HWTEST_F(MidThreadPreemptionTests, givenMidThreadPreemptionWhenFailingOnCsrSurfa FailingMemoryManager(ExecutionEnvironment &executionEnvironment) : OsAgnosticMemoryManager(executionEnvironment) {} GraphicsAllocation *allocateGraphicsMemoryWithAlignment(const AllocationData &allocationData) override { - if (++allocateGraphicsMemoryCount > HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily).getGpgpuEngineInstances().size() - 1) { + auto hwInfo = executionEnvironment.getHardwareInfo(); + if (++allocateGraphicsMemoryCount > HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo).size() - 1) { return nullptr; } return OsAgnosticMemoryManager::allocateGraphicsMemoryWithAlignment(allocationData);