Measurement — различия между версиями

Материал из Русский WINE
Перейти к: навигация, поиск
м (переименовал «WINE/Measurement» в «Measurement»)
Строка 1: Строка 1:
[[Category:WINE]]
+
== Eterforcetest —измерение скорости функций WinAPI ==
{{MovedFromWikiEterSoftRu|WINE/Measurement}}
+
  
  
== Eterforcetest - измерение скорости функций [http://wiki.etersoft.ru/WinAPI WinAPI] ==
+
В связи с невозможностью проводить [[Profiling|измерения (профилирование)]]
 
+
 
+
 
+
В связи с невозможностью проводить [http://wiki.etersoft.ru/Profiling измерения (профилирование])
+
 
+
 
используемого функциями процессорного времени непосредственно
 
используемого функциями процессорного времени непосредственно
 
 
на программе (1С 7.7), был создан набор тестов, измеряющий
 
на программе (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]
+
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]
+
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 микросекунды на каждый вызов;
- Функция [http://wiki.etersoft.ru/GetTickCount GetTickCount] использует 1,25 микросекунды на каждый вызов;
+
- Выполнения цикла вызовов GetTickCount заняло 4380 миллисекунд,
 
+
- что составляет 100% от эталонного значения;
- Выполнения цикла вызовов [http://wiki.etersoft.ru/GetTickCount GetTickCount] заняло 4380 миллисекунд,
+
- была выполнена только 1/10 часть от полного цикла измерений;
 
+
- всего при измерении было выполнено 3,5 миллиона вызовов GetTickCount;
- что составляет 100% от эталонного значения;
+
 
+
- была выполнена только 1/10 часть от полного цикла измерений;
+
 
+
- всего при измерении было выполнено 3,5 миллиона вызовов [http://wiki.etersoft.ru/GetTickCount 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 не становятся.