Measurement

Материал из Русский WINE
Перейти к: навигация, поиск

Eterforcetest —измерение скорости функций WinAPI

В связи с невозможностью проводить измерения (профилирование) используемого функциями процессорного времени непосредственно на программе (1С 7.7), был создан набор тестов, измеряющий время для заданных функций.

Тест может выполняться в Wine и Windows.

Получить тест

Тест в виде EXE-файла:

ftp://updates.etersoft.ru/pub/Etersoft/Eterforcetest/eterforcetest.exe


Репозиторий с исходным кодом:

http://git.etersoft.ru/people/lav/packages/eterforcetest.git


Использование

eterforcetest [название_набора_тестов]

При запуске без параметров производятся тесты по всем направлениям.

При указании конкретного, например, string, проводятся тесты только из набора тестов на строковые функции.

eterforcetest --list

выведет список всех доступных тестов

При выполнении теста выводятся строки наподобие

Test for              GetTickCount .....   1.254mks pc ( 4380 ms) (100%) (1/10 - 3.50m iterations)

Что означает: - Функция GetTickCount использует 1,25 микросекунды на каждый вызов; - Выполнения цикла вызовов GetTickCount заняло 4380 миллисекунд, - что составляет 100% от эталонного значения; - была выполнена только 1/10 часть от полного цикла измерений; - всего при измерении было выполнено 3,5 миллиона вызовов GetTickCount;

Для устранения случайных влияний внутри каждого цикла оформляется 5 подциклов измерений с заведением своего отсчёта и дальнейшим усреднением результатов.


Разработка

Измерение времени работы функций

Тесты создаются следующего вида:

static CHAR *str;



MSTART(1, "strchr", 1) {

      str = strchr(TEST_STRING, 'z');

} MEND


Параметры MSTART:

1. флаг, ненулевое значение которого разрешает выполнения теста

2. текстовое описание тестируемой функции

3. делитель для количества итераций (если функция такова, что 7 млн. итераций выполняется очень долго)


Обратите внимание на статический str и присваивание ему результата работы функции. Без этого компилятор

может выкинуть функцию, результат работы которой не используется.


Проблемы

Замечено, что функции, помеченные inline, на самом деле inline не становятся.