Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Вниз

Сравнение компиляторов - часть 2 


Фэ   (2002-02-22 09:51) [0]

Во-первых с наступающим Прадником Мужики !
Во-вторых - первые результаты тестирования
ftp://ftp.pi8plus.ru/pub/download/compare/compare2.htm (на Celeron-750)
(чуть позже выложу для P-III 1000EB и есть подозрение, что для каждого камня нужен свой компилятор)

1. Почти ни о чем не говорящие и поэтому перечень тестов на простые операции будет продолжен.
Если бы не досадная "оплошность" Дельфи на "пузырьке - первое место было бы ее.
2. Во всех тестах современных компиляторов на первом измерении - провал производительности.
Поэтому я слукавил и удалил его.
Если у кого есть какие-то соображения - поделитесь.

3. Старичок Watcom на этом тесте тоже провалился. Да что с него взять ? Кодогенерация остановилась
на уровне середины 90-х, Sybase его купила и нажала на смывной бачок. А ведь какая вестч была !
Вместе с Zortech C/C++ они отдыхали на остальных.
4. Если кто захочет помочь, то нужен результат для Дельфи 6, исходники выложу.
5. Состав участников будет расширен до Intel Fortran, CodeWarrior и Borland Compiler 5.5.
6. Тест на плавающую точку пока придержу - какие-то неоднозначности с точностью.

К Мерлиновцам: если, по вашему мнению я занимаю ваше пространство и время - скажите.

К VuDZ и iZEN
Давайте хоты бы на одних тестах и размерностях работать - см картинки.
Мы говорим об "оптимизирующих" компиляторах и не будем им помогать. Я тоже обнаружил, что добавление {} резко изменяет код, но по логике нашей и так это одно и тоже.
Высылайте мне exe (без фокусов, надеюсь) и я включу в таблицы Ваши результаты. JIT и C# придется искать.



Фэ   (2002-02-22 11:33) [1]

Выложил сравнение компиляторов на P-III 1000EB
Рейтинг тот же

ftp://ftp.pi8plus.ru/pub/download/compare/compare2.htm



Фэ   (2002-02-22 11:34) [2]

Сорри
ftp://ftp.pi8plus.ru/pub/download/compare/compare1.htm



Фэ   (2002-02-22 11:49) [3]

ftp глючит - перенес на
http://www.pi8plus.ru/win/compare/compare1.htm
http://www.pi8plus.ru/win/compare/compare2.htm



Romkin   (2002-02-22 13:37) [4]

Могу сказать, что D5 выглядит вполне достойно, так что теперь все разговоры о лучшей компиляции в С++ должны отпасть.
Или я ошибаюсь? :-))



Фэ   (2002-02-22 14:00) [5]

Да, вполне.
Причем опции компиляторов подбирались долго и упорно.
Запуск компиляторов - из командной строки.
Значительного улучшения скорости удалось добиться только у Microsoft Compiler по сравнению с опциями по умолчанию.
Но это только часть тестов и самая простая.
Продолжение следует..



VuDZ   (2002-02-22 14:51) [6]

сегодня ночью я закончил свои дела и приступлю сейчас к доделке тестов.


> Romkin © (22.02.02 13:37)
> Могу сказать, что D5 выглядит вполне достойно, так что теперь
> все разговоры о лучшей компиляции в С++ должны отпасть.
> Или я ошибаюсь? :-))

тут по сути дела используется старый добрый С, С++ ещё не использовался, но лучше смотри на результаты


> Причем опции компиляторов подбирались долго и упорно.
> Запуск компиляторов - из командной строки.
> Значительного улучшения скорости удалось добиться только
> у Microsoft Compiler по сравнению с опциями по умолчанию.
> Но это только часть тестов и самая простая.

для интловского копмилятора самые лучшие опции /O3 /Og /G6. Можно использоватьещё некоторые. но обычно этого хватает. иногда может пригодиться /Qunroll2 или 4


> Продолжение следует..

канечно :)



VuDZ   (2002-02-22 14:55) [7]

http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/829/msdncompositedoc.xml - всё что надо для запуска C# программ. 21 метр



Фэ   (2002-02-22 14:58) [8]

Почти так
icl /O3 /Ob2 /Og /G6 %1



iZEN   (2002-02-22 16:14) [9]

http://java.sun.com/j2se/1.4 -- всё что нужно для запуска Java2-приложений(JRE1.4.0 ~12Mb в дистрибутиве)



VuDZ   (2002-02-22 16:18) [10]

а!!!!!!!!!!!!!!
написал пост, а его как ................... сбрило.
в общем так - C# удела всех на пузырьках и решете, оптимизированном и нет.
http://vudz.by.ru/projects/holywar.shtml - тут резльтаты, но сервак по http не доступен пока, только через Ftp :<

на счёт опций копмилятора - по умолчанию он работает ичуть не хуже чем /Ob2, инлайнит всё вподряд, особенно классы. Но на мой взгляд, так как у делфи нет такой опции, лучше не использовать инлайн. У меня он только для рабочих ф-ий для заполнения массивов...



Фэ   (2002-02-22 16:20) [11]

Ok
Просто не успеваю
Я работаю с IBM Age, до JIT-а руки не дошли
C# скачал
Качну счас если в состоянии буду
Праздник-с однако
Сидим хорошо.
Стол, песни, женщины.
Что еще человеку надо..



iZEN   (2002-02-23 09:24) [12]

Для Фэ.
Пошлите мне по e-mail сообщение о своём адресе e-mail, я Вам вышлю JAR-executable, в котором, помимо готовых к запуску тестовых приложений(bubblesort, floattest), будут находится их исходники и инструкция по запуску.
Для запуска Java2-приложений ничего не надо распаковывать -- JVM1.4 сама "подхватит" и запустит код из JAR-executable(по аналогии с Win32 EXE-файлами в Проводнике). Если будет интересно, то WinZIP-ом/WinRAR-ом можете "влезть" в JAR-архив и посмотреть/распаковать его(готовые, исходники, инструкции, etc). Размер JAR-архива с тестами и исходниками не превышает 20кбайт.

P.S. Также вышлите исходники тестов "сортировки Шелла" и "Решето Эратосфена", лучше на ObjectPascal, или C.
P.P.S. Мой e-mail:izen@mail.ru



iZEN   (2002-02-23 09:39) [13]

Да. Ещё не забудьте для запуска моих тестов установить JRE1.4.0(~12Mb в дистрибутиве, источник: http://java.sun.com/j2se/1.4/).
Для перекомпиляции нужно, соответственно, JDK1.4.0(в дистрибутиве около 36Мб, но туда ещё входит JRE1.4.0 :) ).
Хотя перекомпиляция не нужна -- Java-байт-код -- он и в Африке байт-код, неизменен, так сказать, для всех платформ. Конечно, это относится только к одним и тем же опциям компилятора(без debug- и с debug-info).

P.S. Раз Вы работаете с IBM VisualAge, то, возможно, для Java2 там встретите фирменный Java2-компилятор Jikes. Попробуйте в нём откомпилировать мои исходники. Говорят, он более "оптимизирующий". Хотя...чего там ещё оптимизировать -- алгоритмы простейшие. Так и сравним компиляторы Sun и IBM (JRE общая).



iZEN   (2002-02-23 09:49) [14]

Фэ © (22.02.02 16:20):
<...>Я работаю с IBM Age, до JIT-а руки не дошли<...>

Поясняю: JIT(Just-in-Time compiler) входит в саму JVM(Java Virtual Machine), ничего специально не надо конфигурировать/запускать, по-умолчанию, JIT задействуется всегда, хотя можно отключить...:)



VuDZ   (2002-02-23 10:08) [15]

ну-с, уважаемые, всех с празником, Men Day :> (или Man Day, чёрт его поймёшь этот праздник)
Вчера я, как наивное чукотское дитя, хотел доделать класс для работы с длинными числами, но не успел, начали отмечать :>
Сейчас он уже почти готов, так что прийдётся в ближайшем времени его портировать под остальные языки.
Нужен быдет какой-нибудь относительно простой тест, что бы всё это проверять, так как меня интерисует скорость работы с классами, по-этому то, что я делаю, можно назвать взрывом на фабрике классов :>
Подробности - попозже

2Фе
на сколько я помню, inline не поддерживается Делфями и такая оптимизация - нечестная :> по-этому я и не включал её...



VuDZ   (2002-02-23 19:07) [16]

http://vudz.by.ru/files/longnum.cpp - отгадайте-ка, что тут :)
класс написан в стиле С# и на Java портировать его будет легко, на счёт делфи - не знаю... но там ничего не кроме классов и указателей...

вот кусочек кода для проверки:

CLongNum ln, ln2, ln3, ln4;
ln.Init ("11234736123");
ln2.Init("67895245234");
ln3.Init("63452261344");
ln4.Init("21847361234");

ln4.Add(ln3);
ln4.ToString(szStr); // 85299622578

ln3.Mul(ln4);
ln3.ToString(szStr); // 5412453944363819024832

ln4.Mul(ln4.Mul(ln3.Add(ln)));
ln4.ToString(szStr); // 213148679718348551142323475265745825633704429833169715778307160100


особенно хорошо последнее число :)

PS если файл с сервака не читается - поробуйте убрать http://



iZEN   (2002-02-24 17:22) [17]

/**VuDZ © (23.02.02 19:07):
http://vudz.by.ru/files/longnum.cpp - отгадайте-ка, что тут :)<...>
*/

Вот именно -- ОТГАДАЙТЕ!
Так что же там? Кроме шуток.
Я так понимаю, "умножение больших чисел" или что?

P.S. Стиль программирования без комментариев -- бессмысленная трата времени на въезд в смысл написанного.



iZEN   (2002-02-24 17:25) [18]

Назвать то, что есть, комментариями к сожалению нельзя.



VuDZ   (2002-02-24 19:45) [19]

а я редко пишу комментарии в таких проектах :>
в принципе, в начале файла была надпись, что бы не пытались перенять стиль, но это вырезка...

а так, там рабочий класс для работы с числами любой ддлины - сложение, вычитание и умножение.

PS это было написано за 2 часа и главное, без попытки оптимизации - вся работа должна быть возложенна на компилятор, и в дальнейшем для простоты портирования под C#, не нравиться - пишите свой, какие проблемы-то?



iZEN   (2002-02-24 20:08) [20]

В Java для этого я могу воспользоваться классами java.math.BigInteger и java.math.BigDecimal -- там вся арифметика с большими числами уже есть. Может мне не стоит изобретать велосипед, а воспользоваться стандартными Java-классами?



VuDZ   (2002-02-24 20:21) [21]

незнаю, тут всё дело будет в разной реализации - мне как-то не охота вылизывать "готовую" реализацию, пусть это делает компилер.
пусть выскажется Фе и Fellomena, что они думают.

ЗЫ а чем стиль-то плох? комментариев "мало"?



iZEN   (2002-02-24 22:08) [22]

/**VuDZ © (23.02.02 19:07):
<...>класс написан в стиле С# и на Java портировать его будет легко<...>
*/

Отнюдь, уж лучше использовать обычные функции C. ООП-модели у языков C#, ObjectPascal, C++, Java не вполне совместимы. Это касается не только основ ООП, но и того, как это реализовано в каждом из них (например, в C++ нет динамического связывания на уровне RTTI во время выполнения, я уже не говорю об адресной арифметике в работе с объектами; в C# и Java чисто-алгоритмические процедуры включены в синтаксис и семантику; ObjectPascal может использовать asm-вставки в код, превращающие его в мутант-Ассемблер).

Ну да ладно. Это -- так, лирическое отступление.
Хотелось бы представлять алгоритмы на псевдо-языке, понятном любому программисту. Обычно такой язык похож на Pascal...(наверно, я много книг прочёл по алгоритмам, никак не связанным с Pascal, но использующим псевдо-язык, поэтому я могу делать такой вывод).
Мне легче понять Pascal и переписать код под Java, чем разбираться с C++ (не C).



iZEN   (2002-02-24 22:13) [23]

Мы ведь тестируем на самом деле алгоритмы под разными платформами, не так ли?
А обычные рутинные алгоритмы редко нуждаются в ООП-обёртке и мощных возможностях ООП-парадигмы.



iZEN   (2002-02-24 22:17) [24]

Хотя...как сказать...:))



VuDZ   (2002-02-24 22:17) [25]

Небольшое отступление для пояснния:
мня интерисует работа с классами, поэту многие вещи сдеаны далеко не оптимальным образом. Иначе бы я использовал исходники с algolist.by.ru - там нет ни классов ни чего - чистый С



VuDZ   (2002-02-28 19:24) [26]

Дамы и господа. мадам и месье. вот тут - http://vudz.by.ru/longnum/ вы можете найти исходники одного простого класса для простейшей операции над длинными числами на C#.
Если ни у кого ещё не пропало желание продолжить наши тесты, то есть предложение переконвертить этопод паскаль/java/фортран и пр. и проверить результаты.
На счёт исходников - тут пока-что тестируется не работа с классами, а динамическое выдление памяти под классы и строки - каждая копия класса имеет своё имя и некое значение.
В общем, давайте либо продолжать, либо завершать это дело



Фэ   (2002-02-28 20:25) [27]

Привет !
Никаких завершений..
Все только начинается.
Был в отъезде, да и работы накапало.

Итого на сегодня в участниках:

Группа мальчиков:
1.Delphi 5.0 build 6.18 sp.1;
2.Free Pascal Compiler Version 1.0.4;
3.TMT Pascal Compiler Version 3.5;
4.Intel C/C++ Compiler v.5.0.1 build 010525Z;
5.Microsoft C/C++ Compiler v.12.00.8804;
6.Borland C/C++ Compiler v.5.5;
7.Watcom C/C++ v.10.0;

Группа девочек:
1.ActivePerl Win32 build 623;
2.ActivePhyton Win32 build 202;


К сожалению сошел с дистанции Borland Pascal 7 - сердце не выдержало.
Но держиться очень неплохо Watcom C - уважаю.
В ближайшее время выложу очень интересные результаты сравнения на простых тестах (задержал Borland C из-за слишком сильной привязанности к стандарту - боже мой, насколько "умнее" его сегодня IC и MSC).
Сейчас ставлю Intel Fortran.







VuDZ   (2002-02-28 20:52) [28]

рад это слышать.
я в ближайшее время попробую то же выложить кое-какие интересные результаты, но пока могу сказать следующее:
по результатм очень рзных тестов, Intel CCompiler не всегда является лидером. Гораздо больше мне импонирует в этом плане C#, что больше всего порадовало, так это перевод из IL assembly в x86 код происхродит с очень мощной оптимизацией
Правда на этот C# я убил 3 рабочих дня, но сейчас вроде бы освоился :>

PS жесткое придеживание стандартов это есть хорошо, но когда я переключаю с intelCC на MS, то вижу такое, что хоть стой. хоть падай :<

PPS в группу "мальчиков" запиши ещё C#, тут есть к этому некоторые причины :>

Fellomena, ау!



VuDZ   (2002-03-01 00:30) [29]

вот, значит-с, некоторые результаты:
при аботе с классами - частые вызовы конструкторов/деструкторов, работа GarbageCollector, etc. на первом месте оказался С++, причём независимо от компилятора, разница - 40% :<



iZEN   (2002-03-01 00:41) [30]

Провёл серию тестов в Java на сортировку неравномерно распределённы массивов. Заметил странную вещь: при "добавлении" в нормально-распределённый ряд элементов, чьи значения приближались к эпсилон, так и максимальному значению (до представимой infinity) с разных сторон мат. нуля алгоритм пузырька начинал серьёзно замедляться (в ~2 раза медленнее чем при норм. распределении для элементов типа double(8 байт)). На Delphi не успел проверить, но по показаниям тестов сортировки пузырька над норм. распределённым массивом Delphi отстаёт от Java на несколько процентов (3..5%) на моей машине.

Предлагаю тест на сортировку обратно-упорядоченного массива (в порядке убывания значений), где элементы имеют значения от -MAX_VALUE до +MAX_VALUE с "равномерным шагом" заполнения массива 100000 элементов. Этот массив и надо будет упорядочить в порядке возрастания значений. Вот тут-то и проявят себя алгоритмы сортировки на различных языках в полную силу!



Фэ   (2002-03-01 01:08) [31]

По поводу алгоритмов сортировки могу сказать даже следующее:
повсеместно используемый QuickSort проигрывает вставкам и Shell-у на "зашумленных" линейных массивах (обычная ситуация для отсортированной БД с добавлениями за день).

Ok. Включу обратно-линейный массив.



VuDZ   (2002-03-01 01:16) [32]

ща проверим-с...



Фэ   (2002-03-01 01:18) [33]

Кстати, обратите внимание на занятные виды процесса сортировки разными методами (на полпути).
http://www.pi8plus.ru/win/compare/



Фэ   (2002-03-01 01:24) [34]

Для примера
Массив 30 тыс элем от 0 до 1000 double + шум 200 (20%)
Shell 60 ms
Quick 81 ms



VuDZ   (2002-03-01 01:38) [35]

C#
Min iteration - 851
Average time to sort - 856

ICC
Min - 911(941)
Average time to sort - 925(947)

MSC
Min - 1282(1872)
Average time to sort - 1288(1877)

мда, надо сказать. что JIT компилятор .Net вещь весьма отличная...
в скобках - результаты для обратноупорядоченного массива.
э.... ну выводы делайте сами :>



Фэ   (2002-03-01 12:08) [36]

Вот итоги на простых тестах
http://www.pi8plus.ru/win/compare/

Т.к. паскаль-код сильно проиграл на работе со string, то исключил последний HASH-тест и см. рис 2

На обратной сортировке:
Intel C, Free Pascal, Borlan C проиграли
Watcom и MSC вырвалсиь вперед
Дельфи было все равно

Дооформлю результаты и возьмусь за класс HugeNumber




VuDZ   (2002-03-01 15:38) [37]

Ксатати, есть у меня один алгоритм - tiger - 192x битное хэширование. Вся шутка юмора состоит в том, что MS проиграл Интелу в 2.5 раза :>
Но: там используется на всю ANSI C99 - defined, 64 bit числа и перенести это один в один на делфи будет очень сложно, но именно на таком тесте можно увидеть рельое положение дел в оптимизции.
Исходники - http://vudz.by.ru/tiger/



Фэ   (2002-03-01 15:58) [38]

У меня на Дельфи есть многие из применяемых сегодня хеш-функций

MD4 16 byte
MD5 16 byte
SHA 20 byte
SHA1 20 byte
RMD128 16 byte
RMD160 20 byte
RMD256 32 byte
RMD320 40 byte
Haval256 32 byte
Haval224 28 byte
Haval192 24 byte
Haval160 20 byte
Haval128 16 byte
Sapphire320 40 byte
Sapphire288 36 byte
Sapphire256 32 byte
Sapphire224 28 byte
Sapphire192 24 byte
Sapphire160 20 byte
Sapphire128 16 byte
Snefru 32 byte
Square 16 byte
Tiger 24 byte



VuDZ   (2002-03-01 16:40) [39]

вот, нужен tiger.
у меня есть ещё некоторые, но основные MD5 & Tiger, больше ничем не пользуюсь



VuDZ   (2002-03-01 17:09) [40]

тут - http://vudz.by.ru/holywar/ лежаь exe и исходники трёх тестов - bublesort, erratoshpen sieve, longnum.
что надо - закачивай, всё отдельно, C# & C++



VuDZ   (2002-03-02 18:31) [41]

Итак, дамы и господа, вот результаты тестирования по tiger-hash:
ICL 238385454.545455
MCL 262224000.000000
C# 227456832.9718

странно, что интел проиграл МС компилятору, но C# держиться на высоте. Учитавая, что основное - это работа с памятью и мат. операции:

// развёрнутый макрос :>
c += (table)[768+(byte)(((UInt32)(a))>>(1*8))] ^ (table)[512+(byte)(((UInt32)(a))>>(3*8))] ^ (table)[256+(byte)(((UInt32)((a)>>(4*8)))>>(1*8))] ^ (table)[(byte)(((UInt32)((a)>>(4*8)))>>(3*8))];


то не всё так плохо...



VuDZ   (2002-03-02 19:19) [42]

Интересно, что проект компилиться с оптимизацией и дебаг инфой вместе. Если убрать дебаг, то получатся 243289095.12761, самое лучшее значение




Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.84 MB
Время: 0.035 c
4-33002           Demn                  2002-02-07 12:16  2002.04.11  
Process ID


1-32789           NIC2                  2002-03-31 11:55  2002.04.11  
WebBrowser


1-32773           mike.dld              2002-03-31 12:45  2002.04.11  
Директивы или что?


1-32748           cok                   2002-03-29 20:51  2002.04.11  
Explorer.exe


3-32629           Big_Rom               2002-03-19 07:00  2002.04.11  
Как мне програмно узнать логин юзера который работает в текущий момент