Measurement

Материал из Русский WINE
Версия от 21:55, 13 мая 2012; МаксимКузьмик (обсуждение)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Wackowiki-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была автоматически перемещена с old.wiki.etersoft.ru.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


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 не становятся.