fix: add mechanism to detect gpu timestamp overflows

unify naming CpuGpu to GpuCpu

Related-To: NEO-8394
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
Mateusz Jablonski
2023-10-18 10:00:43 +02:00
committed by Compute-Runtime-Automation
parent 26666d8c6f
commit 4dfa12c8eb
55 changed files with 410 additions and 234 deletions

View File

@@ -227,7 +227,7 @@ void CommandQueueHw<Family>::setupEvent(EventBuilder &eventBuilder, cl_event *ou
if (eventObj->isProfilingEnabled()) {
TimeStampData queueTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&queueTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&queueTimeStamp);
eventObj->setQueueTimeStamp(queueTimeStamp);
if (isCommandWithoutKernel(cmdType) && cmdType != CL_COMMAND_MARKER) {

View File

@@ -61,7 +61,7 @@ void *CommandQueue::cpuDataTransferHandler(TransferProperties &transferPropertie
eventBuilder.create<Event>(this, transferProperties.cmdType, CompletionStamp::notReady, CompletionStamp::notReady);
outEventObj = eventBuilder.getEvent();
TimeStampData queueTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&queueTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&queueTimeStamp);
outEventObj->setQueueTimeStamp(queueTimeStamp);
outEventObj->setCPUProfilingPath(true);
*eventsRequest.outEvent = outEventObj;
@@ -99,7 +99,7 @@ void *CommandQueue::cpuDataTransferHandler(TransferProperties &transferPropertie
if (outEventObj) {
TimeStampData submitTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&submitTimeStamp);
outEventObj->setSubmitTimeStamp(submitTimeStamp);
}
// wait for the completness of previous commands

View File

@@ -421,7 +421,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
if (eventBuilder.getEvent() && isProfilingEnabled()) {
TimeStampData submitTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&submitTimeStamp);
eventBuilder.getEvent()->setSubmitTimeStamp(submitTimeStamp);
eventBuilder.getEvent()->setStartTimeStamp();
}
@@ -851,7 +851,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
if (isProfilingEnabled() && eventBuilder.getEvent()) {
TimeStampData submitTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&submitTimeStamp);
eventBuilder.getEvent()->setSubmitTimeStamp(submitTimeStamp);
auto hwTimestampNode = eventBuilder.getEvent()->getHwTimeStampNode();
@@ -1118,7 +1118,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
if (eventBuilder.getEvent() && isProfilingEnabled()) {
TimeStampData submitTimeStamp;
getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
getDevice().getOSTime()->getGpuCpuTime(&submitTimeStamp);
eventBuilder.getEvent()->setSubmitTimeStamp(submitTimeStamp);
eventBuilder.getEvent()->setStartTimeStamp();
}

View File

@@ -374,7 +374,7 @@ void Event::calculateProfilingDataInternal(uint64_t contextStartTS, uint64_t con
if (DebugManager.flags.EnableDeviceBasedTimestamps.get()) {
startTimeStamp = static_cast<uint64_t>(globalStartTS * frequency);
if (startTimeStamp < gpuQueueTimeStamp) {
while (startTimeStamp < gpuQueueTimeStamp) {
startTimeStamp += static_cast<uint64_t>((1ULL << gfxCoreHelper.getGlobalTimeStampBits()) * frequency);
}
} else {
@@ -612,7 +612,7 @@ void Event::submitCommand(bool abortTasks) {
this->cmdQueue->getGpgpuCommandStreamReceiver().makeResident(*timeStampNode->getBaseGraphicsAllocation());
cmdToProcess->timestamp = timeStampNode;
}
this->cmdQueue->getDevice().getOSTime()->getCpuGpuTime(&submitTimeStamp);
this->cmdQueue->getDevice().getOSTime()->getGpuCpuTime(&submitTimeStamp);
if (profilingCpuPath) {
setStartTimeStamp();
} else {

View File

@@ -14,7 +14,7 @@
using namespace NEO;
struct FailDeviceTime : public MockDeviceTime {
bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *) override {
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *) override {
return false;
}
};

View File

@@ -164,7 +164,7 @@ class FailingMockOSTime : public OSTime {
class FailingMockDeviceTime : public DeviceTime {
public:
bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) override {
return false;
}

View File

@@ -93,7 +93,7 @@ class MyDeviceTime : public DeviceTime {
EXPECT_FALSE(true);
return 0;
}
bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *) override {
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *) override {
EXPECT_FALSE(true);
return false;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2022 Intel Corporation
* Copyright (C) 2018-2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -42,9 +42,11 @@ void PerformanceCountersFixture::setUp() {
device = std::make_unique<MockClDevice>(new MockDevice());
context = std::make_unique<MockContext>(device.get());
queue = std::make_unique<MockCommandQueue>(context.get(), device.get(), &queueProperties, false);
osInterface = std::unique_ptr<OSInterface>(new OSInterface());
osInterface->setDriverModel(std::unique_ptr<DriverModel>(new DrmMock(*device->getExecutionEnvironment()->rootDeviceEnvironments[0])));
device->setOSTime(new MockOSTimeLinux(osInterface.get()));
auto &rootDeviceEnvironment = *device->getExecutionEnvironment()->rootDeviceEnvironments[0];
rootDeviceEnvironment.osInterface = std::make_unique<OSInterface>();
rootDeviceEnvironment.osInterface->setDriverModel(std::unique_ptr<DriverModel>(new DrmMock(rootDeviceEnvironment)));
device->setOSTime(new MockOSTimeLinux(*rootDeviceEnvironment.osInterface));
}
//////////////////////////////////////////////////////

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2022 Intel Corporation
* Copyright (C) 2018-2023 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -36,5 +36,5 @@ TEST_F(PerformanceCountersLinuxTest, WhenCreatingPerformanceCountersThenDrmFileD
auto performanceCountersLinux = static_cast<PerformanceCountersLinux *>(performanceCounters.get());
EXPECT_EQ(LinuxAdapterType::DrmFileDescriptor, performanceCountersLinux->adapter.Type);
EXPECT_EQ(osInterface->getDriverModel()->as<NEO::Drm>()->getFileDescriptor(), performanceCountersLinux->adapter.DrmFileDescriptor);
EXPECT_EQ(device->getRootDeviceEnvironment().osInterface->getDriverModel()->as<NEO::Drm>()->getFileDescriptor(), performanceCountersLinux->adapter.DrmFileDescriptor);
}

View File

@@ -361,8 +361,6 @@ void PerformanceCountersMetricsLibraryFixture::tearDown() {
//////////////////////////////////////////////////////
PerformanceCountersFixture::PerformanceCountersFixture() {
executionEnvironment = std::make_unique<MockExecutionEnvironment>();
rootDeviceEnvironment = std::make_unique<RootDeviceEnvironment>(*executionEnvironment);
rootDeviceEnvironment->setHwInfoAndInitHelpers(defaultHwInfo.get());
}
//////////////////////////////////////////////////////

View File

@@ -226,8 +226,6 @@ struct PerformanceCountersFixture {
std::unique_ptr<MockContext> context;
std::unique_ptr<MockCommandQueue> queue;
std::unique_ptr<MockExecutionEnvironment> executionEnvironment;
std::unique_ptr<RootDeviceEnvironment> rootDeviceEnvironment;
std::unique_ptr<OSInterface> osInterface;
};
//////////////////////////////////////////////////////

View File

@@ -215,9 +215,10 @@ struct PerformanceCountersMetricsLibraryTest : public PerformanceCountersMetrics
public:
void SetUp() override {
PerformanceCountersMetricsLibraryFixture::setUp();
auto hwInfo = rootDeviceEnvironment->getHardwareInfo();
auto &gfxCoreHelper = rootDeviceEnvironment->getHelper<GfxCoreHelper>();
osContext = std::make_unique<MockOsContext>(0, EngineDescriptorHelper::getDefaultDescriptor(gfxCoreHelper.getGpgpuEngineInstances(*rootDeviceEnvironment)[0],
auto &rootDeviceEnvironment = *executionEnvironment->rootDeviceEnvironments[0];
auto hwInfo = rootDeviceEnvironment.getHardwareInfo();
auto &gfxCoreHelper = rootDeviceEnvironment.getHelper<GfxCoreHelper>();
osContext = std::make_unique<MockOsContext>(0, EngineDescriptorHelper::getDefaultDescriptor(gfxCoreHelper.getGpgpuEngineInstances(rootDeviceEnvironment)[0],
PreemptionHelper::getDefaultPreemptionMode(*hwInfo)));
queue->getGpgpuCommandStreamReceiver().setupContext(*osContext);
}

View File

@@ -42,9 +42,10 @@ void PerformanceCountersFixture::setUp() {
device = std::make_unique<MockClDevice>(new MockDevice());
context = std::make_unique<MockContext>(device.get());
queue = std::make_unique<MockCommandQueue>(context.get(), device.get(), &queueProperties, false);
osInterface = std::unique_ptr<OSInterface>(new OSInterface());
osInterface->setDriverModel(std::unique_ptr<DriverModel>(new WddmMock(*rootDeviceEnvironment)));
device->setOSTime(new MockOSTimeWin(osInterface.get()));
auto &rootDeviceEnvironment = *device->getExecutionEnvironment()->rootDeviceEnvironments[0];
rootDeviceEnvironment.osInterface = std::make_unique<OSInterface>();
rootDeviceEnvironment.osInterface->setDriverModel(std::unique_ptr<DriverModel>(new WddmMock(rootDeviceEnvironment)));
device->setOSTime(new MockOSTimeWin(*rootDeviceEnvironment.osInterface));
}
//////////////////////////////////////////////////////

View File

@@ -505,7 +505,7 @@ class MyOSDeviceTime : public DeviceTime {
EXPECT_FALSE(true);
return 0;
}
bool getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *) override {
bool getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *) override {
EXPECT_FALSE(true);
return false;
}