Листинг 4.1

#include <windows.h> #include <stdio.h>
int InitApp(HINSTANCE KodPril. char *NameW - "Test"): HWND hWnd:

В систему команд процессора добавлена специальная команда Rdtsc, помещающая счетчик TSC в регистры EDX: ЕАХ. Именно в этой паре регистров С++ возвращает результат работы функций, поэтому чтение счетчика легко оформить в виде встраиваемой функции, код которой приведен в листинге 4.2.

Измерение временных интервалов

Листинг 4.2

inline _int64 HightTimeO {
_asm { rdtsc

Если в командной строке компилятора установлен ключ /ОМ или /0Ь2, то функция вызывается без команды CALL и оператор _int64 hgTime- HightTime() выполняется тремя машинными командами. В интегрированной среде установка этого ключа осуществляется в поле Inline function expansion окна свойств проекта, которое вызывается командой меню Project ► Properties ► С/С ++ ► Optimisation.

Встроенный ассемблер шестой и седьмой версий Visual С принимает мнемокод команды rdtsc. Работая в более ранних версиях, можно при желании вставлять непосредственно ее машинный код - db Of h. 031h.

Функция HightTime() позволяет измерять время в тактах процессора. Для этого надо засечь показания счетчика в начале и в конце измеряемого участка программы, как это показано в листинге 4.3.

Листинг 4.3

_int64 Start - HightTimeO:

измеряемый участок> _int64 Finish - HightTimeO: //вычислить разность int Time - Finish - Start: Полученный результат будет несколько завышен за счет накладных затрат времени на измерение. Время выполнения команд занесения результата в Start после чтения счетчика и время выполнения команды rdtsc перед занесением в Fi ni sh будут прибавлены к истинному времени выполнения измеряемого фрагмента программы. Для уточнения результата из него надо вычесть время выполнения пустого фрагмента, как показано в листинге 4.4.

Листинг 4.4

_int64 Start - HightTimeO: _int64 Finish - HightTimeO: int Over -( intHFinish - Start): Time - Time - Over;

Чтобы переводить время из количества тактов в секунды или доли секунды, нужно использовать значение тактовой частоты процессора. Необходимые для измерения данные будем хранить в полях структуры, объявленной в листинге 4.5.


⇐ Предыдущая| |Следующая ⇒