Measurement — различия между версиями
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
== Eterforcetest —измерение скорости функций WinAPI == | == Eterforcetest —измерение скорости функций WinAPI == | ||
− | + | В связи с невозможностью проводить [[Profiling|измерения (профилирование)]] используемого функциями процессорного времени непосредственно на программе (1С 7.7), был создан набор тестов, измеряющий время для заданных функций. | |
− | + | ||
− | В связи с невозможностью проводить [[Profiling|измерения (профилирование)]] | + | |
− | используемого функциями процессорного времени непосредственно | + | |
− | на программе (1С 7.7), был создан набор тестов, измеряющий | + | |
− | время для заданных функций. | + | |
Тест может выполняться в Wine и Windows. | Тест может выполняться в Wine и Windows. | ||
=== Получить тест === | === Получить тест === | ||
− | + | *Тест в виде EXE-файла: | |
− | Тест в виде EXE-файла: | + | |
− | + | ||
ftp://updates.etersoft.ru/pub/Etersoft/Eterforcetest/eterforcetest.exe | ftp://updates.etersoft.ru/pub/Etersoft/Eterforcetest/eterforcetest.exe | ||
− | + | *Репозиторий с исходным кодом: | |
− | Репозиторий с исходным кодом: | + | |
− | + | ||
http://git.etersoft.ru/people/lav/packages/eterforcetest.git | http://git.etersoft.ru/people/lav/packages/eterforcetest.git | ||
− | |||
− | |||
=== Использование === | === Использование === | ||
− | |||
eterforcetest [название_набора_тестов] | eterforcetest [название_набора_тестов] | ||
Строка 38: | Строка 26: | ||
<pre> | <pre> | ||
− | Test for | + | Test for GetTickCount ..... 1.254mks pc ( 4380 ms) (100%) (1/10 - 3.50m iterations) |
</pre> | </pre> | ||
Что означает: | Что означает: | ||
− | + | * Функция GetTickCount использует 1,25 микросекунды на каждый вызов; | |
− | + | * Выполнения цикла вызовов GetTickCount заняло 4380 миллисекунд, | |
− | + | * что составляет 100% от эталонного значения; | |
− | + | * была выполнена только 1/10 часть от полного цикла измерений; | |
− | + | * всего при измерении было выполнено 3,5 миллиона вызовов GetTickCount; | |
Для устранения случайных влияний внутри каждого цикла оформляется 5 подциклов измерений с заведением своего отсчёта | Для устранения случайных влияний внутри каждого цикла оформляется 5 подциклов измерений с заведением своего отсчёта | ||
и дальнейшим усреднением результатов. | и дальнейшим усреднением результатов. | ||
− | |||
− | |||
=== Разработка === | === Разработка === | ||
− | |||
− | |||
− | |||
==== Измерение времени работы функций ==== | ==== Измерение времени работы функций ==== | ||
− | |||
− | |||
Тесты создаются следующего вида: | Тесты создаются следующего вида: | ||
Строка 72: | Строка 53: | ||
} MEND</pre> | } MEND</pre> | ||
− | |||
Параметры MSTART: | Параметры MSTART: | ||
− | + | #флаг, ненулевое значение которого разрешает выполнения теста | |
− | + | #текстовое описание тестируемой функции | |
− | + | #делитель для количества итераций (если функция такова, что 7 млн. итераций выполняется очень долго) | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Обратите внимание на статический str и присваивание ему результата работы функции. Без этого компилятор может выкинуть функцию, результат работы которой не используется. | ||
=== Проблемы === | === Проблемы === | ||
Строка 95: | Строка 67: | ||
Замечено, что функции, помеченные inline, на самом деле inline не становятся. | Замечено, что функции, помеченные 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 не становятся.