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