Я профилирую вызов Direct3D9 API. Я прочитал много документации here, которая описывает процесс. У меня есть вопрос, хотя бы о вычислении прошедших тактовых циклов. Вот мой текущий метод:Как преобразовать тики в тактовые циклы?
// measurement vars
LARGE_INTEGER start, stop, freq;
//
// flush command buffer here
//
//
// issue begin query here
//
// start timer
QueryPerformanceCounter(&start);
//
//draw
//
//
// issue end query here and wait on results
//
// stop timer
QueryPerformanceCounter(&stop);
// calc elapsed ticks
stop.QuadPart -= start.QuadPart;
// get frequency
QueryPerformanceFrequency(&freq);
// ticks for easier handling
ULONG ticks = stop.QuadPart;
// calc elapsed clock cycles
cycles = (2.8E9 * ticks)/(double)freq.QuadPart;
Мой вопрос касается значения 2.8E9, которое должно представлять скорость процессора. Это правильный способ расчета тактовых циклов? Я профилирую отдельные вызовы API, и мои результаты отличаются от тех, которые указаны в приведенной выше ссылке. Если установить скорость работы процессора 1E9 то номера находятся в диапазоне ... Я просто хотел, чтобы проверить мой метод ...
Меня интересует, как рассчитываются тактовые циклы –
Циклы часов не могут быть рассчитаны, они считаются терминами _QueryPerformanceCounter_. Нет простого способа оценить объем работы отдельных аппаратных компонентов для вашей обработки. Современные компьютеры/ОС строятся так, чтобы скрыть это. Также в связанной статье говорится, что он просто использует этот метод, потому что «он доступен в Windows и его легко использовать» для «времени выполнения ** **». Мой ответ просто предлагает лучшие способы достижения этого. Извините, что, возможно, неправильно истолковал свой вопрос, но я не вижу дополнительной информации, чтобы дать здесь. –
Мне интересно понять формулу, используемую для вычисления количества циклов, прошедших при задании двух временных меток ... Формула в вышеприведенном вопросе говорит о умножении тиков по скорости процессора в hz и делении на частоту таймера высокого разрешения. Это верно? –