Fix: Flush on svmMap on multi device

On multi device contexts we allocate svm in system memory.

This caused svmMap calls to assume no copy is needed and
no cache flush was sent to gpu and data modified by earlier
gpu commands was not being visible on host.

This change will add pipecontrol with dcFlush on svmMap
calls when task count from wait is enabled.

Related-To: NEO-6948

Signed-off-by: Dominik Dabek <dominik.dabek@intel.com>
This commit is contained in:
Dominik Dabek
2022-06-14 15:45:07 +00:00
committed by Compute-Runtime-Automation
parent 9761098733
commit ae61f0368a
2 changed files with 37 additions and 1 deletions

View File

@ -1160,3 +1160,33 @@ HWTEST_F(CommandQueueHwTest, givenNoGpuHangWhenFinishingCommandQueueHwThenWaitFo
EXPECT_EQ(1, mockCmdQueueHw.waitForAllEnginesCalledCount);
EXPECT_EQ(CL_SUCCESS, finishResult);
}
HWTEST2_F(CommandQueueHwTest, givenCommandSvmMapAndDirectSubmissionEnabledAndUpdateTagFromWaitEnabledWhenCheckIsCacheFlushCommandThenReturnTrue, IsAtLeastXeHpCore) {
DebugManagerStateRestore restorer;
MockCommandQueueHw<FamilyType> mockCmdQueueHw{context, pClDevice, nullptr};
mockCmdQueueHw.getUltCommandStreamReceiver().directSubmissionAvailable = false;
ASSERT_FALSE(mockCmdQueueHw.getUltCommandStreamReceiver().isDirectSubmissionEnabled());
DebugManager.flags.UpdateTaskCountFromWait.set(0);
ASSERT_FALSE(mockCmdQueueHw.getUltCommandStreamReceiver().isUpdateTagFromWaitEnabled());
EXPECT_FALSE(mockCmdQueueHw.isCacheFlushCommand(CL_COMMAND_SVM_MAP));
mockCmdQueueHw.getUltCommandStreamReceiver().directSubmissionAvailable = true;
ASSERT_TRUE(mockCmdQueueHw.getUltCommandStreamReceiver().isDirectSubmissionEnabled());
DebugManager.flags.UpdateTaskCountFromWait.set(0);
ASSERT_FALSE(mockCmdQueueHw.getUltCommandStreamReceiver().isUpdateTagFromWaitEnabled());
EXPECT_FALSE(mockCmdQueueHw.isCacheFlushCommand(CL_COMMAND_SVM_MAP));
mockCmdQueueHw.getUltCommandStreamReceiver().directSubmissionAvailable = false;
ASSERT_FALSE(mockCmdQueueHw.getUltCommandStreamReceiver().isDirectSubmissionEnabled());
DebugManager.flags.UpdateTaskCountFromWait.set(3);
ASSERT_TRUE(mockCmdQueueHw.getUltCommandStreamReceiver().isUpdateTagFromWaitEnabled());
EXPECT_FALSE(mockCmdQueueHw.isCacheFlushCommand(CL_COMMAND_SVM_MAP));
mockCmdQueueHw.getUltCommandStreamReceiver().directSubmissionAvailable = true;
ASSERT_TRUE(mockCmdQueueHw.getUltCommandStreamReceiver().isDirectSubmissionEnabled());
DebugManager.flags.UpdateTaskCountFromWait.set(3);
ASSERT_TRUE(mockCmdQueueHw.getUltCommandStreamReceiver().isUpdateTagFromWaitEnabled());
EXPECT_TRUE(mockCmdQueueHw.isCacheFlushCommand(CL_COMMAND_SVM_MAP));
EXPECT_FALSE(mockCmdQueueHw.isCacheFlushCommand(CL_COMMAND_NDRANGE_KERNEL));
}