По мотивам http://www.linux.org.ru/forum/talks/6292735.
Тест в значительной мере переписан, написан на C с использованием POSIX (mingw скомпилировать не смог).
Теперь тест состоит из 11 подтестов:
1. Замер производительности rand() — поскольку она используется везде, как источник данных.
2. Заполнение 8 мегабайтного блока данных;
3. Арифметические опреации над int;
4. Арифметические опреации над double;
5. Арифметические опреации над long double;
6. Арифметические опреации над unsigned int;
7. Вычисление функции (double);
8. Вычисление функции (long double);
9. Многопоточное выполнение (255 потоков);
10. Запись 8 мегабайтного блока данных на диск;
11. Чтение случайных байтов из файла.
В тесте применяется алгоритм вычислений K-best (K = 5; +1 выполняется для «разогрева»). Максимально производится на подтест — 54 замера, минимально — 6, количество замеров зависит от сходимости результатов.
Приведу пример своих результатов:
Random Stress Test v0.9
(1/11) Random function (40960000 steps) 519685 microsecs.
(2/11) Memory filling (8388608 bytes, 128 steps) 190266 microsecs.
(3/11) Arithmetic test with integers (20480000 steps) 2897902 microsecs.
(4/11) Arithmetic test with doubles (20480000 steps) 3971717 microsecs.
(5/11) Arithmetic test with long doubles (20480000 steps) 6098532 microsecs.
(6/11) Arithmetic test with unsigned integers (20480000 steps) 2887154 microsecs.
(7/11) Complex function calculation (double) (5120000 steps) 2319473 microsecs.
(8/11) Complex function calculation (long double) (5120000 steps) 3301908 microsecs.
(9/11) Massive threads test (255 threads, 409600 steps) 3009749 microsecs.
(10/11) File sequential writing (8388608 bytes, 4 steps) 1010326 microsecs.
(11/11) File random reading (8388608 bytes, 5120000 steps) 8840010 microsecs.
(--/--) Control task 1815780 microsecs.
На AMD V120 2,2GHz, Gentoo Linux.
Проведение эксперимента: Берём исходник теста ftp://arbuzoff.org/shared2/main.tar.bz2 (сервер частный, не мой, отключается на ночь). Распаковываем. Компилируем командой
gcc -lm -pthread main.c -o test
P.S. Intel Celeron 500MHz не справился с тестом. Застрял на 2м уже.
P.P.S. По задумке 9й тест должен был пускать 1024 потока. Однако, скомпилированное приложение в Mandrake Linux 10.0 сегфолилось.
P.P.P.S. Двуядерная машина с Debian 6 (default kernel) показала результат в 14 сек в девятом, тогда как одноядерная с Gentoo (ядро 2.6.38.2) - 5 сек (в варианте в 1024 потоками). Sic!
P.P.P.P.S. Эта мелкая программулина станет частью общего приложения на Qt. Вопрос аудитории: имеет ли смысл вкручивать в неё Qtизмы или лучше оставить в том виде, в каком она сейчас?
P.P.P.P.P.S. Для обеспечения сходимости (и более быстрого завершения работы программы) желательно на время тестирования максимально компьютер разгрузить и не мешать ему.
P.P.P.P.P.P.S. 10й и 11й тест не привели к заметному проявлению 12309)). Заметное снижение производительности может произойти на 9м и, возможно, 2м тесте.
Заранее благодарен за помощь.