получение времени от тактов

Я бегу QNX,

Я использовал функцию для получения тактов в секунду,

uint64_t clockPerSec = getCPS();
uint64_t currentClockCycle = getCurrentCycle();

функции

uint64_t getCPS()
{
return (~(uint64_t)0) /SYSPAGE_ENTRY(qtime) -> cycles_per_sec;
}

uint63_t getCurrentCycle()
{
return ClockCycles();
}

затем после запуска функции

я делаю

currentClockCycle = getCurrentCycle() - currentClockCycle;

Я не использую его во всех приложениях, поэтому у меня нет переполнения / переполнения часов, просто для измерения производительности одной функции после некоторых дополнений / изменений.

тем не мение,
Мне просто интересно, получаю ли я правильный вывод.

Я рассчитал результат таким образом,

double result = static_cast<double>(clockPerSec)/currentClockCycle;
// this get me the time in second??
// then multiplied it by 1000000 to get a micro-sec measurement

я делаю что-то не так?

когда используешь

ftime(&t_start);

затем

ftime(&t_end);

и вывести разницу таким образом, я вижу, что время, которое я получаю больше, почти вдвое

Первый метод я получаю 0,6 мс
второй с использованием ftime я получаю результат 1.xx мс

1

Решение

Вы просто смешиваете (измеряете) две разные вещи: такты количество тиков, которые ядро ​​дает вашему приложению — оно не считается Другой приложения, работающие на том же ядре. в то время как ftime возвращает абсолютное (настенные часы) время. так разница между двумя ftimes вернуть абсолютную длительность между двумя временными точками. в то время как первые подсчитывают, просто измеряют, сколько тактов процессора использует ваше (и только ваше) приложение … так что вы можете считать это исключительно ваше приложение во время выполнения — т.е. если нет Другой В приложениях на этом хосте первое и второе измерения будут (теоретически) равны (или около того).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]