2013-08-06 7 views
1

Я бегу 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 ms

ответ

0

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