Measurement — различия между версиями
м (переименовал «WINE/Measurement» в «Measurement») |
|||
Строка 1: | Строка 1: | ||
− | + | == Eterforcetest —измерение скорости функций WinAPI == | |
− | + | ||
− | + | В связи с невозможностью проводить [[Profiling|измерения (профилирование)]] | |
− | + | ||
− | + | ||
− | + | ||
− | В связи с невозможностью проводить [ | + | |
− | + | ||
используемого функциями процессорного времени непосредственно | используемого функциями процессорного времени непосредственно | ||
− | |||
на программе (1С 7.7), был создан набор тестов, измеряющий | на программе (1С 7.7), был создан набор тестов, измеряющий | ||
− | |||
время для заданных функций. | время для заданных функций. | ||
− | |||
− | |||
Тест может выполняться в Wine и Windows. | Тест может выполняться в Wine и Windows. | ||
− | |||
− | |||
=== Получить тест === | === Получить тест === | ||
− | |||
− | |||
Тест в виде EXE-файла: | Тест в виде EXE-файла: | ||
− | + | ftp://updates.etersoft.ru/pub/Etersoft/Eterforcetest/eterforcetest.exe | |
− | + | ||
Репозиторий с исходным кодом: | Репозиторий с исходным кодом: | ||
− | + | http://git.etersoft.ru/people/lav/packages/eterforcetest.git | |
Строка 39: | Строка 24: | ||
=== Использование === | === Использование === | ||
− | + | eterforcetest [название_набора_тестов] | |
− | + | ||
− | eterforcetest [название_набора_тестов] | + | |
− | + | ||
− | + | ||
При запуске без параметров производятся тесты по всем направлениям. | При запуске без параметров производятся тесты по всем направлениям. | ||
При указании конкретного, например, string, проводятся тесты только из набора тестов | При указании конкретного, например, string, проводятся тесты только из набора тестов | ||
− | |||
на строковые функции. | на строковые функции. | ||
− | + | eterforcetest --list | |
− | + | ||
− | eterforcetest --list | + | |
выведет список всех доступных тестов | выведет список всех доступных тестов | ||
− | |||
− | |||
При выполнении теста выводятся строки наподобие | При выполнении теста выводятся строки наподобие | ||
− | <pre>Test for GetTickCount ..... 1.254mks pc ( 4380 ms) (100%) (1/10 - 3.50m iterations)</pre> | + | <pre> |
+ | Test for GetTickCount ..... 1.254mks pc ( 4380 ms) (100%) (1/10 - 3.50m iterations) | ||
+ | </pre> | ||
Что означает: | Что означает: | ||
− | + | - Функция GetTickCount использует 1,25 микросекунды на каждый вызов; | |
− | + | - Выполнения цикла вызовов GetTickCount заняло 4380 миллисекунд, | |
− | + | - что составляет 100% от эталонного значения; | |
− | + | - была выполнена только 1/10 часть от полного цикла измерений; | |
− | + | - всего при измерении было выполнено 3,5 миллиона вызовов GetTickCount; | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
Для устранения случайных влияний внутри каждого цикла оформляется 5 подциклов измерений с заведением своего отсчёта | Для устранения случайных влияний внутри каждого цикла оформляется 5 подциклов измерений с заведением своего отсчёта | ||
− | |||
и дальнейшим усреднением результатов. | и дальнейшим усреднением результатов. | ||
Строка 122: | Строка 92: | ||
=== Проблемы === | === Проблемы === | ||
− | |||
− | |||
Замечено, что функции, помеченные inline, на самом деле inline не становятся. | Замечено, что функции, помеченные inline, на самом деле inline не становятся. | ||
+ | |||
+ | [[Category:WINE]] |
Версия 13:49, 2 марта 2014
Содержание
[убрать]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 не становятся.