mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-09 22:43:00 +08:00
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:
committed by
Compute-Runtime-Automation
parent
26666d8c6f
commit
4dfa12c8eb
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -361,8 +361,6 @@ void PerformanceCountersMetricsLibraryFixture::tearDown() {
|
||||
//////////////////////////////////////////////////////
|
||||
PerformanceCountersFixture::PerformanceCountersFixture() {
|
||||
executionEnvironment = std::make_unique<MockExecutionEnvironment>();
|
||||
rootDeviceEnvironment = std::make_unique<RootDeviceEnvironment>(*executionEnvironment);
|
||||
rootDeviceEnvironment->setHwInfoAndInitHelpers(defaultHwInfo.get());
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user