mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 08:53:55 +08:00
refactor: add debug flag to synchronize Event before reset
Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
82db3eda90
commit
7ac825e74b
@@ -392,6 +392,13 @@ ze_result_t EventImp<TagSizeT>::hostSynchronize(uint64_t timeout) {
|
||||
|
||||
template <typename TagSizeT>
|
||||
ze_result_t EventImp<TagSizeT>::reset() {
|
||||
if (NEO::DebugManager.flags.SynchronizeEventBeforeReset.get() != -1) {
|
||||
if (NEO::DebugManager.flags.SynchronizeEventBeforeReset.get() == 2 && queryStatus() != ZE_RESULT_SUCCESS) {
|
||||
printf("\nzeEventHostReset: Event %p not ready. Calling zeEventHostSynchronize.", this);
|
||||
}
|
||||
|
||||
hostSynchronize(std::numeric_limits<uint64_t>::max());
|
||||
}
|
||||
if (inOrderExecEvent) {
|
||||
inOrderExecEvent = false;
|
||||
inOrderExecDataAllocation = nullptr;
|
||||
|
||||
@@ -3218,6 +3218,7 @@ HWTEST_F(EventTests, GivenCsrTbxModeWhenEventCreatedAndSignaledThenEventAllocati
|
||||
struct MockEventCompletion : public L0::EventImp<uint32_t> {
|
||||
using EventImp<uint32_t>::gpuStartTimestamp;
|
||||
using EventImp<uint32_t>::gpuEndTimestamp;
|
||||
using EventImp<uint32_t>::hostAddress;
|
||||
|
||||
MockEventCompletion(L0::EventPool *eventPool, int index, L0::Device *device) : EventImp(eventPool, index, device, false) {
|
||||
auto neoDevice = device->getNEODevice();
|
||||
@@ -3249,8 +3250,24 @@ struct MockEventCompletion : public L0::EventImp<uint32_t> {
|
||||
return EventImp<uint32_t>::hostEventSetValue(eventValue);
|
||||
}
|
||||
|
||||
ze_result_t hostSynchronize(uint64_t timeout) override {
|
||||
hostSynchronizeCalled++;
|
||||
return L0::EventImp<uint32_t>::hostSynchronize(timeout);
|
||||
}
|
||||
|
||||
ze_result_t queryStatus() override {
|
||||
if (failOnNextQueryStatus) {
|
||||
failOnNextQueryStatus = false;
|
||||
return ZE_RESULT_NOT_READY;
|
||||
}
|
||||
|
||||
return L0::EventImp<uint32_t>::queryStatus();
|
||||
}
|
||||
|
||||
bool shouldHostEventSetValueFail = false;
|
||||
bool failOnNextQueryStatus = false;
|
||||
uint32_t assignKernelEventCompletionDataCounter = 0u;
|
||||
uint32_t hostSynchronizeCalled = 0;
|
||||
};
|
||||
|
||||
TEST_F(EventTests, WhenQueryingStatusAfterHostSignalThenDontAccessMemoryAndReturnSuccess) {
|
||||
@@ -3261,6 +3278,68 @@ TEST_F(EventTests, WhenQueryingStatusAfterHostSignalThenDontAccessMemoryAndRetur
|
||||
EXPECT_EQ(event->assignKernelEventCompletionDataCounter, 0u);
|
||||
}
|
||||
|
||||
TEST_F(EventTests, givenDebugFlagSetWhenCallingResetThenSynchronizeBeforeReset) {
|
||||
DebugManager.flags.SynchronizeEventBeforeReset.set(1);
|
||||
|
||||
auto event = std::make_unique<MockEventCompletion>(eventPool.get(), 1u, device);
|
||||
event->failOnNextQueryStatus = true;
|
||||
|
||||
*reinterpret_cast<uint32_t *>(event->hostAddress) = Event::STATE_SIGNALED;
|
||||
|
||||
testing::internal::CaptureStdout();
|
||||
|
||||
EXPECT_EQ(0u, event->hostSynchronizeCalled);
|
||||
|
||||
event->reset();
|
||||
|
||||
EXPECT_EQ(1u, event->hostSynchronizeCalled);
|
||||
|
||||
std::string output = testing::internal::GetCapturedStdout();
|
||||
std::string expectedOutput("");
|
||||
EXPECT_EQ(expectedOutput, output);
|
||||
}
|
||||
|
||||
TEST_F(EventTests, givenDebugFlagSetWhenCallingResetThenPrintLogAndSynchronizeBeforeReset) {
|
||||
DebugManager.flags.SynchronizeEventBeforeReset.set(2);
|
||||
|
||||
auto event = std::make_unique<MockEventCompletion>(eventPool.get(), 1u, device);
|
||||
*reinterpret_cast<uint32_t *>(event->hostAddress) = Event::STATE_SIGNALED;
|
||||
|
||||
{
|
||||
event->failOnNextQueryStatus = false;
|
||||
|
||||
testing::internal::CaptureStdout();
|
||||
|
||||
EXPECT_EQ(0u, event->hostSynchronizeCalled);
|
||||
|
||||
event->reset();
|
||||
|
||||
EXPECT_EQ(1u, event->hostSynchronizeCalled);
|
||||
|
||||
std::string output = testing::internal::GetCapturedStdout();
|
||||
std::string expectedOutput("");
|
||||
EXPECT_EQ(expectedOutput, output);
|
||||
}
|
||||
|
||||
{
|
||||
event->failOnNextQueryStatus = true;
|
||||
|
||||
testing::internal::CaptureStdout();
|
||||
|
||||
EXPECT_EQ(1u, event->hostSynchronizeCalled);
|
||||
|
||||
event->reset();
|
||||
|
||||
EXPECT_EQ(2u, event->hostSynchronizeCalled);
|
||||
|
||||
std::string output = testing::internal::GetCapturedStdout();
|
||||
char expectedStr[128] = {};
|
||||
snprintf(expectedStr, 128, "\nzeEventHostReset: Event %p not ready. Calling zeEventHostSynchronize.", event.get());
|
||||
|
||||
EXPECT_EQ(std::string(expectedStr), output);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(EventTests, whenAppendAdditionalCsrThenStoreUniqueCsr) {
|
||||
auto csr1 = reinterpret_cast<NEO::CommandStreamReceiver *>(0x1234);
|
||||
auto csr2 = reinterpret_cast<NEO::CommandStreamReceiver *>(0x5678);
|
||||
|
||||
@@ -245,6 +245,7 @@ DECLARE_DEBUG_VARIABLE(int32_t, DebugSetMemoryDiagnosticsDelay, -1, "-1: default
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, EnableDeviceStateVerification, -1, "-1: default, 0: disable, 1: enable check of device state before submit on Windows")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, EnableDynamicPostSyncAllocLayout, -1, "-1: default, 0: Keep Timestamp size layout, 1: Use write immediate layout (qword) and switch dynamically to TS for profiling")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, PrintTimestampPacketUsage, -1, "-1: default, 0: Disabled, 1: Print when TSP is allocated, initialized, returned to pool, etc.")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, SynchronizeEventBeforeReset, -1, "-1: default, 0: Disabled, 1: Synchronize Event completion on host before calling reset. 2: Synchronize + print extra logs.")
|
||||
DECLARE_DEBUG_VARIABLE(int32_t, TrackNumCsrClientsOnSyncPoints, -1, "-1: default, 0: Disabled, 1: If set, synchronization points like zeEventHostSynchronize will unregister CmdQ from CSR clients")
|
||||
|
||||
/*LOGGING FLAGS*/
|
||||
|
||||
@@ -537,5 +537,6 @@ EnableDynamicPostSyncAllocLayout = -1
|
||||
PrintTimestampPacketUsage = -1
|
||||
TrackNumCsrClientsOnSyncPoints = -1
|
||||
CommandListTimestampRefreshIntervalInMilliSec = -1
|
||||
SynchronizeEventBeforeReset = -1
|
||||
RemoveRestrictionsOnNumberOfThreadsInGpgpuThreadGroup = 0
|
||||
# Please don't edit below this line
|
||||
|
||||
Reference in New Issue
Block a user