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

@@ -9,13 +9,15 @@
#include "shared/source/helpers/hw_info.h"
#include <mutex>
namespace NEO {
double OSTime::getDeviceTimerResolution(HardwareInfo const &hwInfo) {
return hwInfo.capabilityTable.defaultProfilingTimerResolution;
};
bool DeviceTime::getCpuGpuTime(TimeStampData *pGpuCpuTime, OSTime *osTime) {
bool DeviceTime::getGpuCpuTimeImpl(TimeStampData *pGpuCpuTime, OSTime *osTime) {
pGpuCpuTime->cpuTimeinNS = 0;
pGpuCpuTime->gpuTimeStamp = 0;
@@ -29,6 +31,33 @@ uint64_t DeviceTime::getDynamicDeviceTimerClock(HardwareInfo const &hwInfo) cons
return static_cast<uint64_t>(1000000000.0 / OSTime::getDeviceTimerResolution(hwInfo));
}
bool DeviceTime::getGpuCpuTime(TimeStampData *pGpuCpuTime, OSTime *osTime) {
if (!getGpuCpuTimeImpl(pGpuCpuTime, osTime)) {
return false;
}
auto maxGpuTimeStampValue = osTime->getMaxGpuTimeStamp();
static std::mutex gpuTimeStampOverflowCounterMutex;
std::lock_guard<std::mutex> lock(gpuTimeStampOverflowCounterMutex);
pGpuCpuTime->gpuTimeStamp &= (maxGpuTimeStampValue - 1);
if (!initialGpuTimeStamp) {
initialGpuTimeStamp = pGpuCpuTime->gpuTimeStamp;
waitingForGpuTimeStampOverflow = true;
} else {
if (waitingForGpuTimeStampOverflow && pGpuCpuTime->gpuTimeStamp < *initialGpuTimeStamp) {
gpuTimeStampOverflowCounter++;
waitingForGpuTimeStampOverflow = false;
}
if (!waitingForGpuTimeStampOverflow && pGpuCpuTime->gpuTimeStamp > *initialGpuTimeStamp) {
waitingForGpuTimeStampOverflow = true;
}
pGpuCpuTime->gpuTimeStamp += gpuTimeStampOverflowCounter * maxGpuTimeStampValue;
}
return true;
}
bool OSTime::getCpuTime(uint64_t *timeStamp) {
*timeStamp = 0;
return true;