From 5f7541084d2bbca56b059262d71028294a0a65e2 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Wed, 18 Jan 2023 09:16:56 +0000 Subject: [PATCH] Flush tag update on device init Signed-off-by: Lukasz Jobczyk --- .../unit_test/command_queue/blit_enqueue_1_tests.cpp | 11 +++++++++++ opencl/test/unit_test/linux/main_linux_dll.cpp | 8 ++++++-- .../command_stream_receiver_hw_base.inl | 6 +----- shared/source/device/device.cpp | 2 +- shared/source/device/device.h | 3 ++- shared/source/dll/device_dll.cpp | 4 ++-- shared/test/common/mocks/device_ult.cpp | 3 +-- 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/opencl/test/unit_test/command_queue/blit_enqueue_1_tests.cpp b/opencl/test/unit_test/command_queue/blit_enqueue_1_tests.cpp index b20146b4c2..54c55b13b2 100644 --- a/opencl/test/unit_test/command_queue/blit_enqueue_1_tests.cpp +++ b/opencl/test/unit_test/command_queue/blit_enqueue_1_tests.cpp @@ -228,6 +228,17 @@ HWTEST_TEMPLATED_F(BlitAuxTranslationTests, whenFlushTagUpdateThenMiFlushDwIsFlu EXPECT_NE(cmdFound, cmdListBcs.end()); } +HWTEST_TEMPLATED_F(BlitAuxTranslationTests, whenInitializeDeviceWithFirstSubmissionThenMiFlushDwIsFlushed) { + using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW; + + EXPECT_EQ(SubmissionStatus::SUCCESS, bcsCsr->initializeDeviceWithFirstSubmission()); + + auto cmdListBcs = getCmdList(bcsCsr->getCS(0), 0); + + auto cmdFound = expectCommand(cmdListBcs.begin(), cmdListBcs.end()); + EXPECT_NE(cmdFound, cmdListBcs.end()); +} + HWTEST_TEMPLATED_F(BlitAuxTranslationTests, whenFlushTagUpdateThenSetStallingCmdsFlag) { auto ultCsr = static_cast *>(bcsCsr); diff --git a/opencl/test/unit_test/linux/main_linux_dll.cpp b/opencl/test/unit_test/linux/main_linux_dll.cpp index 265b96f63d..ca7ddf81ef 100644 --- a/opencl/test/unit_test/linux/main_linux_dll.cpp +++ b/opencl/test/unit_test/linux/main_linux_dll.cpp @@ -884,8 +884,12 @@ TEST(DeviceTest, whenCheckBlitSplitEnabledThenReturnsTrue) { EXPECT_TRUE(Device::isBlitSplitEnabled()); } -TEST(DeviceTest, whenCheckIsInitDeviceWithFirstSubmissionEnabledThenReturnsTrue) { - EXPECT_TRUE(Device::isInitDeviceWithFirstSubmissionEnabled()); +TEST(DeviceTest, givenCsrHwWhenCheckIsInitDeviceWithFirstSubmissionEnabledThenReturnsTrue) { + EXPECT_TRUE(Device::isInitDeviceWithFirstSubmissionEnabled(CommandStreamReceiverType::CSR_HW)); +} + +TEST(DeviceTest, givenCsrNonHwWhenCheckIsInitDeviceWithFirstSubmissionEnabledThenReturnsTrue) { + EXPECT_FALSE(Device::isInitDeviceWithFirstSubmissionEnabled(CommandStreamReceiverType::CSR_TBX)); } TEST(PlatformsDestructor, whenGlobalPlatformsDestructorIsCalledThenGlobalPlatformsAreDestroyed) { diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index 3b94de862c..daadc41c48 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -1583,11 +1583,7 @@ void CommandStreamReceiverHw::createKernelArgsBufferAllocation() { template SubmissionStatus CommandStreamReceiverHw::initializeDeviceWithFirstSubmission() { - auto lock = obtainUniqueOwnership(); - - auto &commandStream = getCS(EncodeBatchBufferStartOrEnd::getBatchBufferEndSize()); - auto commandStreamStart = commandStream.getUsed(); - return this->flushSmallTask(commandStream, commandStreamStart); + return flushTagUpdate(); } template diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index f28d356ecb..42b85bf4be 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -388,7 +388,7 @@ bool Device::createEngine(uint32_t deviceCsrIndex, EngineTypeUsage engineTypeUsa if (!defaultEngineAlreadySet) { defaultEngineIndex = deviceCsrIndex; - if (Device::isInitDeviceWithFirstSubmissionEnabled()) { + if (osContext->isDebuggableContext() || Device::isInitDeviceWithFirstSubmissionEnabled(commandStreamReceiver->getType())) { if (SubmissionStatus::SUCCESS != commandStreamReceiver->initializeDeviceWithFirstSubmission()) { return false; } diff --git a/shared/source/device/device.h b/shared/source/device/device.h index 3593571d64..95607cc879 100644 --- a/shared/source/device/device.h +++ b/shared/source/device/device.h @@ -10,6 +10,7 @@ #include "shared/source/helpers/engine_control.h" #include "shared/source/helpers/engine_node_helper.h" #include "shared/source/helpers/non_copyable_or_moveable.h" +#include "shared/source/helpers/options.h" #include "shared/source/os_interface/hw_info_config.h" #include "shared/source/os_interface/performance_counters.h" #include "shared/source/utilities/reference_tracked_object.h" @@ -107,7 +108,7 @@ class Device : public ReferenceTrackedObject { RootDeviceEnvironment &getRootDeviceEnvironmentRef() const; bool isFullRangeSvm() const; static bool isBlitSplitEnabled(); - static bool isInitDeviceWithFirstSubmissionEnabled(); + static bool isInitDeviceWithFirstSubmissionEnabled(CommandStreamReceiverType csrType); bool isBcsSplitSupported(); bool areSharedSystemAllocationsAllowed() const; template diff --git a/shared/source/dll/device_dll.cpp b/shared/source/dll/device_dll.cpp index ab2e883a56..45879d086b 100644 --- a/shared/source/dll/device_dll.cpp +++ b/shared/source/dll/device_dll.cpp @@ -13,8 +13,8 @@ bool Device::isBlitSplitEnabled() { return true; } -bool Device::isInitDeviceWithFirstSubmissionEnabled() { - return true; +bool Device::isInitDeviceWithFirstSubmissionEnabled(CommandStreamReceiverType csrType) { + return csrType == CommandStreamReceiverType::CSR_HW; } } // namespace NEO diff --git a/shared/test/common/mocks/device_ult.cpp b/shared/test/common/mocks/device_ult.cpp index 74ac0e6e16..bc8fdf6f1b 100644 --- a/shared/test/common/mocks/device_ult.cpp +++ b/shared/test/common/mocks/device_ult.cpp @@ -7,14 +7,13 @@ #include "shared/source/device/device.h" #include "shared/test/common/helpers/ult_hw_config.h" - namespace NEO { bool Device::isBlitSplitEnabled() { return ultHwConfig.useBlitSplit; } -bool Device::isInitDeviceWithFirstSubmissionEnabled() { +bool Device::isInitDeviceWithFirstSubmissionEnabled(CommandStreamReceiverType csrType) { return ultHwConfig.useFirstSubmissionInitDevice; }