Страница 1 из 3

Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 00:55
nongrato
Итак вздумалось мне однажды провести сравнительный тест производительности всех доступных мне систем. Т.к. все системы имеют разные архитектуры, бенчмарк должен иметь открытый код. После недолгого гугления удалось выяснить, что для этой задачи уже сто лет применяется LINPACK benchmark. Изначально написанный на Фортране, он также имеет имплементацю и на Си. Именно эту версию я и выбрал для тестов. На всех платформах код был скомпилирован с помощью "гнутого" компилятора.

Результаты вышли примерно такие:

на Core i5 3.2GHz под Linux тест выдал около 1800 MFLOPS
MIPS R12000 400MHz под Irix 6.5 --------------- 160 MFLOPS
UltraSparc IIi 440MHz под Solaris 8 -------------- 60 MFLOPS
AMD k-6-II 400MHz под Windows 98 ------------- 23 MFLOPS

Некоторые результаты весьма удивили и озадачили. Например по субъективным ощущениям и Sun Ultra и SGI Octane(UltraSparc и MIPS соответственно) имеют схожую производительность, более того "жабий" код на УльтраСпарке выполняется заметно быстрее. Неужели МИПС действительно настолько опрережает по операциям с плавающей точкой?! :?

Отсюда у меня два вопроса:
существует ли кроссплатформенный бенчмарк который более комплексно тестирует производительность?
Можно ли скомпилировать ЭТОТ код под 8086? Мой Amstrad XT еще не протестирован 8-)

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 02:33
Nika
Прежде решите, что именно вы решили пробенчить.
Если это скорость работы процессора по выполнению операций с вещественными числами (FLOPS) - скомпилируйте ассемблерный кусок кода любым транслятором, а дальше линкуйте его в двоичном виде к программам на разных платформах. Будет адекватно . И не будет зависеть от платформы, только от железа.
Если интересует производительность системы (софта) - найдите кроссплатформенный архиватор, сделайте сборки его под разные платфомы и на одном и том же железе под разными платформами архивируйте достаточно болшое количество мелких файлов.
Вот и весь бенчмарк.
Остальные способы тестирования для меня туманны. Зависят от комплекса непонятных факторов.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 02:45
nongrato
Где ж я достану эквивалентные фрагменты ассемблерного кода под USparc и MIPS? :) На всякий случай напоминаю, что разница между ними чуть больше чем между Pentium 1 и 2.

Вариант с архиватором более дельный.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 02:50
Nika
nongrato писал(а):Вариант с архиватором более дельный.
Тогда вариант с двоичным куском кода для разного железа да, отпадает.
Имелась в виду всёже только х86 платформа.
А вариант с архиватором чуть ли не вообще единственный из возможных.
nongrato писал(а):Можно ли скомпилировать ЭТОТ код под 8086? Мой Amstrad XT еще не протестирован
В приложении - откомпилированный код того текста, что по вашей ссылке, - для DOS (8086).
Не проверял, что там и как, просто откомпилировал и всё.

-> Вложение удалено <-

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 02:58
nongrato
о, супер! Спасибо. Прогнал пока на виртуальной машине- завтра попробую на железе. Чем компиляли? GCC? Флаг -O выставляли? Без него скорость исполнения в 3-5 раз ниже.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 03:04
Nika
nongrato писал(а):о, супер! Спасибо. Прогнал пока на виртуальной машине- завтра попробую на железе. Чем компиляли? GCC? Флаг -O выставляли? Без него скорость исполнения в 3-5 раз ниже.

Компилировал TurboC v.2.0.
Опции:
tcc -ml -v- -y- -1 -k -a- -f -N- -K- -r- -j10 flops.c
То-есть, заказана "-f" эмуляция 8087 - пойдёт на любой машине, даже без сопроцессора.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 03:06
nongrato
Вот кстати сопроцессор там есть, ну да ладно) Завтра доложу что да как

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 30 июл 2014, 03:12
Nika
nongrato писал(а):Вот кстати сопроцессор там есть, ну да ладно) Завтра доложу что да как
Не проблема.
Перекомпилировал в две версии - 8087 и эмуляция.

-> Атач удалён <-

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 01:06
Freeman
nongrato писал(а):AMD k-6-II 400MHz под Windows 98 ------------- 23 MFLOPS

Мне больше всего эта строчка понравилась, ибо раньше уже делился наблюдениями:
Freeman писал(а):Ядро 9x нивелирует любой быстрый компьютер до уровня 500 МГц, и на такой машине выгодней эксплуатировать ОС NT-ветки.

Для полноты восприятия неплохо бы прогнать тест на той же машине под Windows 2000.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 01:40
nongrato
Итак, бесчеловечные эксперименты продолжаются.

К сожалению попытка запустить Linpack на 8086 потерпела фиаско. Скомпилированные юзером Nika файлы на железяке просто отказались запускаться без объяснения причин, а скомпилированный мной самостоятельно непосредственно на целевой машине, тем же TCC с тем же набором флагов вызывает зависание. Поэтому Amstrad в битве титанов далее не участвует.

Зато нашлась еще одна полезная тулза: Java Micro Benchmark

Как следует из названия, написано оно на "Жабе", а значит теоретически запустится на чем угодно. Но и тут не все слава богу. Самая свежая версия JRE под IRIX - 1.4, программа же на такой тухлятине запускаться отказывается. Остальные результаты вышли такими:

 Развернуть: Core i5 3.2GHz
Number of processors / threads: 4 / 4
*** Start Java Micro Benchmark ***
Thread (0) Int arithmetic operations per second: 755.5723468077068 E6
Thread (0) Long arithmetic operations per second: 449.74139914549136 E6
Thread (0) Double arithmetic operations per second: 600.4202948063645 E6
Thread (0) Trig arithmetic operations per second: 3.1615558014543153 E6
Thread (1) Int arithmetic operations per second: 758.4376192643155 E6
Thread (1) Long arithmetic operations per second: 421.4075014749262 E6
Thread (1) Double arithmetic operations per second: 598.9817316561846 E6
Thread (1) Trig arithmetic operations per second: 3.1347965517241376 E6
Thread (2) Int arithmetic operations per second: 779.7270962962964 E6
Thread (2) Long arithmetic operations per second: 437.15847038251366 E6
Thread (2) Double arithmetic operations per second: 597.7286317991632 E6
Thread (2) Trig arithmetic operations per second: 3.0797662457653217 E6
Thread (3) Int arithmetic operations per second: 781.2500007812499 E6
Thread (3) Long arithmetic operations per second: 439.2708108939161 E6
Thread (3) Double arithmetic operations per second: 605.1437222390318 E6
Thread (3) Trig arithmetic operations per second: 3.114294923699782 E6


Time: 54862.0 ms
Arithmetic operations per second: 1809.332509767451 E6
*** End Java Micro Benchmark ***

 Развернуть: UltraSparc IIi 440MHz
Number of processors / threads: 1 / 1
*** Start Java Micro Benchmark ***
Thread (0) Int arithmetic operations per second: 59.803247376132525 E6
Thread (0) Long arithmetic operations per second: 28.267752176616916 E6
Thread (0) Double arithmetic operations per second: 85.52856662675333 E6
Thread (0) Trig arithmetic operations per second: 0.6535521207764199 E6


Time: 142880.0 ms
Arithmetic operations per second: 43.5632795750698 E6
*** End Java Micro Benchmark ***

 Развернуть: AMD k-6-II 400MHz
Number of processors / threads: 1 / 1
*** Start Java Micro Benchmark ***
Thread (0) Int arithmetic operations per second: 69.34812766990291 E6
Thread (0) Long arithmetic operations per second: 23.299161253494873 E6
Thread (0) Double arithmetic operations per second: 17.831669062054207 E6
Thread (0) Trig arithmetic operations per second: 0.19535067395975775 E6


Time: 278030.0 ms
Arithmetic operations per second: 27.668577164852934 E6
*** End Java Micro Benchmark ***


Freeman писал(а):неплохо бы прогнать тест на той же машине под Windows 2000.


Ну это если уж совсем делать будет нечего, но сомневаюсь, что даже такие уловки спасут х86-й хлам от позора. 8-)

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 04:44
Nika
nongrato писал(а):К сожалению попытка запустить Linpack на 8086 потерпела фиаско. Скомпилированные юзером Nika файлы на железяке просто отказались запускаться без объяснения причин,

А ведь компилировал я с помощью этого TC2.0 программки для реального 8086.
Давно это было..
Думаю, удалось понять, в чём там было дело. У меня в настройках была забита опция для 286+.
Если не похерили ещё идею с этой Linpack на XT, то вот, попробуйте такой вариант (c опцией "-1-"):


Вложения:
FLOPS.RAR
(28.33 Кб) Скачиваний: 705

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 13:41
nongrato
Nika писал(а):Если не похерили ещё идею с этой Linpack на XT, то вот, попробуйте такой вариант (c опцией "-1-"):



Работает! Вот это спасибо!!!

Результат:

Siemens 8086+Intel 8087: 18 KFLOPS

интересно, что оба варианта программы показали идентичный результат.

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 15:11
Nika
nongrato писал(а):
Nika писал(а):Если не похерили ещё идею с этой Linpack на XT, то вот, попробуйте такой вариант (c опцией "-1-"):
Работает! Вот это спасибо!!!
Результат:
Siemens 8086+Intel 8087: 18 KFLOPS
Ну, вот и хорошо.
Компилировалось с опциями
- tcc.exe -ml -v- -y- -1- -k -a- -N- -K- -r- -j10 -f flops.c
и tcc.exe -ml -v- -y- -1- -k -a- -N- -K- -r- -j10 -f87 flops.c

У меня на ноуте под WinXP в DOS-сеансе показывает 232 KFLOPS. В принципе, реальное соотношение,
но по-хорошему стоило бы посмотреть внимательно, чем там именно та программка занимается.
интересно, что оба варианта программы показали идентичный результат.
Что он должен различаться меньше, чем на 386, например, это ясно (на 8087 многое не оптимизировано, долгая засылка в регистры).
Но идентичного результата быть воде как не должно. Да, нужно смотреть, чем именно занимается та программка.

Ну, и я наугад добавил недостающую в исходнике строчку в начале файла flops.c (на соотношение показателей повлиять не должно):
#define CLOCKS_PER_SEC 18.2

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 16:53
nongrato
Nika писал(а): Да, нужно смотреть, чем именно занимается та программка.


Цитата из Википедии:

решение плотной СЛАУ методом LU-декомпозиции

Re: Кроссплатформенный бенчмарк?

СообщениеДобавлено: 31 июл 2014, 17:55
Nika
Понятно.
Поэтому там на входе и требуется задавать размер матрицы.
Ну, раз программа написана на стандартном Си, то можно переносить её на разные платформы и сравнивать показатели.