mirror of
https://github.com/intel/compute-runtime.git
synced 2025-09-15 13:01:45 +08:00
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:

committed by
Compute-Runtime-Automation

parent
9761098733
commit
ae61f0368a
@ -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));
|
||||
}
|
Reference in New Issue
Block a user