Measurement — различия между версиями
(Import from wiki.etersoft.ru) |
|||
(не показано 5 промежуточных версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | == Eterforcetest —измерение скорости функций WinAPI == | |
− | + | В связи с невозможностью проводить [[Profiling|измерения (профилирование)]] используемого функциями процессорного времени непосредственно на программе (1С 7.7), был создан набор тестов, измеряющий время для заданных функций. | |
− | + | ||
− | + | ||
− | == Eterforcetest | + | |
− | + | ||
− | + | ||
− | + | ||
− | В связи с невозможностью проводить [ | + | |
− | + | ||
− | используемого функциями процессорного времени непосредственно | + | |
− | + | ||
− | на программе (1С 7.7), был создан набор тестов, измеряющий | + | |
− | + | ||
− | время для заданных функций. | + | |
− | + | ||
− | + | ||
Тест может выполняться в Wine и Windows. | Тест может выполняться в Wine и Windows. | ||
− | |||
− | |||
=== Получить тест === | === Получить тест === | ||
+ | *Тест в виде EXE-файла: | ||
+ | ftp://updates.etersoft.ru/pub/Etersoft/Eterforcetest/eterforcetest.exe | ||
− | + | *Репозиторий с исходным кодом: | |
− | + | http://git.etersoft.ru/people/lav/packages/eterforcetest.git | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | Репозиторий с исходным кодом: | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Использование === | === Использование === | ||
− | + | eterforcetest [название_набора_тестов] | |
− | + | ||
− | + | ||
− | eterforcetest [название_набора_тестов] | + | |
− | + | ||
− | + | ||
При запуске без параметров производятся тесты по всем направлениям. | При запуске без параметров производятся тесты по всем направлениям. | ||
При указании конкретного, например, string, проводятся тесты только из набора тестов | При указании конкретного, например, string, проводятся тесты только из набора тестов | ||
− | |||
на строковые функции. | на строковые функции. | ||
− | + | eterforcetest --list | |
− | + | ||
− | eterforcetest --list | + | |
выведет список всех доступных тестов | выведет список всех доступных тестов | ||
− | |||
− | |||
При выполнении теста выводятся строки наподобие | При выполнении теста выводятся строки наподобие | ||
− | <pre>Test for | + | <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 подциклов измерений с заведением своего отсчёта | ||
− | |||
и дальнейшим усреднением результатов. | и дальнейшим усреднением результатов. | ||
− | |||
− | |||
=== Разработка === | === Разработка === | ||
− | |||
− | |||
− | |||
==== Измерение времени работы функций ==== | ==== Измерение времени работы функций ==== | ||
− | |||
− | |||
Тесты создаются следующего вида: | Тесты создаются следующего вида: | ||
Строка 102: | Строка 53: | ||
} MEND</pre> | } MEND</pre> | ||
− | |||
Параметры MSTART: | Параметры MSTART: | ||
− | + | #флаг, ненулевое значение которого разрешает выполнения теста | |
− | + | #текстовое описание тестируемой функции | |
− | + | #делитель для количества итераций (если функция такова, что 7 млн. итераций выполняется очень долго) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Обратите внимание на статический str и присваивание ему результата работы функции. Без этого компилятор может выкинуть функцию, результат работы которой не используется. | ||
=== Проблемы === | === Проблемы === | ||
+ | Замечено, что функции, помеченные inline, на самом деле inline не становятся. | ||
− | + | [[Категория:Разработка]] | |
− | + | {{Wine}} |
Текущая версия на 23:28, 8 декабря 2015
Содержание
[убрать]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:
- флаг, ненулевое значение которого разрешает выполнения теста
- текстовое описание тестируемой функции
- делитель для количества итераций (если функция такова, что 7 млн. итераций выполняется очень долго)
Обратите внимание на статический str и присваивание ему результата работы функции. Без этого компилятор может выкинуть функцию, результат работы которой не используется.
Проблемы
Замечено, что функции, помеченные inline, на самом деле inline не становятся.