From 4768be244bd46f9fd370f34a275e35fed8d8de58 Mon Sep 17 00:00:00 2001 From: Michal Mrozek Date: Wed, 13 Oct 2021 14:41:40 +0000 Subject: [PATCH] Cache post syncs. Signed-off-by: Michal Mrozek --- .../source/command_queue/gpgpu_walker_xehp_and_later.inl | 7 ++++++- .../command_queue/dispatch_walker_tests_xehp_and_later.cpp | 4 ++-- .../command_container/command_encoder_xehp_and_later.inl | 6 +++++- .../test_encode_dispatch_kernel_xehp_and_later.cpp | 6 +++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl b/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl index 27f068804f..722e31e273 100644 --- a/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl +++ b/opencl/source/command_queue/gpgpu_walker_xehp_and_later.inl @@ -112,7 +112,12 @@ void GpgpuWalkerHelper::setupTimestampPacket(LinearStream *cmdStream, postSyncData.setDataportPipelineFlush(true); auto gmmHelper = rootDeviceEnvironment.getGmmHelper(); - postSyncData.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED)); + + if (MemorySynchronizationCommands::isDcFlushAllowed()) { + postSyncData.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED)); + } else { + postSyncData.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER)); + } EncodeDispatchKernel::adjustTimestampPacket(*walkerCmd, *rootDeviceEnvironment.getHardwareInfo()); diff --git a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp index cf4201ad3e..aaa7811484 100644 --- a/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp +++ b/opencl/test/unit_test/command_queue/dispatch_walker_tests_xehp_and_later.cpp @@ -450,7 +450,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenTimestamp EXPECT_NE(hwParser.itorWalker, hwParser.cmdList.end()); auto gmmHelper = device->getGmmHelper(); - auto expectedMocs = gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED); + auto expectedMocs = MemorySynchronizationCommands::isDcFlushAllowed() ? gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED) : gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER); auto walker = genCmdCast(*hwParser.itorWalker); EXPECT_EQ(FamilyType::POSTSYNC_DATA::OPERATION::OPERATION_WRITE_TIMESTAMP, walker->getPostSync().getOperation()); @@ -490,7 +490,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterDispatchWalkerBasicTest, givenDebugVari auto walker = genCmdCast(*hwParser.itorWalker); auto gmmHelper = device->getGmmHelper(); - auto expectedMocs = gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED); + auto expectedMocs = MemorySynchronizationCommands::isDcFlushAllowed() ? gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED) : gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER); auto &postSyncData = walker->getPostSync(); EXPECT_EQ(FamilyType::POSTSYNC_DATA::OPERATION::OPERATION_WRITE_TIMESTAMP, diff --git a/shared/source/command_container/command_encoder_xehp_and_later.inl b/shared/source/command_container/command_encoder_xehp_and_later.inl index 837c3bea9b..c93b1abeb1 100644 --- a/shared/source/command_container/command_encoder_xehp_and_later.inl +++ b/shared/source/command_container/command_encoder_xehp_and_later.inl @@ -252,7 +252,11 @@ void EncodeDispatchKernel::encode(CommandContainer &container, postSync.setDestinationAddress(eventAddress); auto gmmHelper = device->getRootDeviceEnvironment().getGmmHelper(); - postSync.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED)); + if (MemorySynchronizationCommands::isDcFlushAllowed()) { + postSync.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED)); + } else { + postSync.setMocs(gmmHelper->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER)); + } EncodeDispatchKernel::adjustTimestampPacket(walkerCmd, hwInfo); } diff --git a/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp b/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp index 715756e002..705f7380fb 100644 --- a/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp +++ b/shared/test/unit_test/encoders/test_encode_dispatch_kernel_xehp_and_later.cpp @@ -312,7 +312,11 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenEventAddressWhenEncod auto itor = find(commands.begin(), commands.end()); ASSERT_NE(itor, commands.end()); auto cmd = genCmdCast(*itor); - EXPECT_EQ(pDevice->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED), cmd->getPostSync().getMocs()); + if (MemorySynchronizationCommands::isDcFlushAllowed()) { + EXPECT_EQ(pDevice->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER_CACHELINE_MISALIGNED), cmd->getPostSync().getMocs()); + } else { + EXPECT_EQ(pDevice->getGmmHelper()->getMOCS(GMM_RESOURCE_USAGE_OCL_BUFFER), cmd->getPostSync().getMocs()); + } } HWCMDTEST_F(IGFX_XE_HP_CORE, CommandEncodeStatesTest, givenCleanHeapsWhenDispatchKernelThenFlushNotAdded) {