Надеясь разобраться в причинах отставания OpenSolaris в недавно проведенном тестировании (https://www.opennet.ru/opennews/art.shtml?num=20174), ресурс phoronix.com решил (http://www.phoronix.com/scan.php?page=article&item=sun_studi...) оценить разницу в производительности приложений, собранных компиляторами Sun Studio 12 (2008/10/07), GCC 3.4.3 и GCC 4.0.2. Тесты выполнялись на платформе OpenSolaris 2008.11.
Итоги:
- В тесте (http://www.phoronix.com/scan.php?page=article&item=sun_studi...) на скорость кодирования MP3 в LAME, GCC 4 сборка выполнила задание за 43 секунды, GCC 3 - за 45, а Sun Studio 12 - за 127 сек., т.е. выполнялась в 3 раза дольше. При кодировании в формат Ogg отставание Sun Studio 12 было не столь значительным: 37 против 27 секунд. Вероятно причиной отставания является недостаточное использование опций оптимизации при сборке программ в Sun Studio, в то время как при сборке в GCC разработчики задействовали более эффективные опции оптимизации ...URL: http://www.phoronix.com/scan.php?page=article&item=sun_studi...
Новость: https://www.opennet.ru/opennews/art.shtml?num=20393
Шото этот тест мне не понятен. Почему GCC 4.0.2? Чтобы в последнем тесте специально показатель был ниже у GCC.
В предпоследнем тесте
>Шото этот тест мне не понятен. Почему GCC 4.0.2? Чтобы в последнем
>тесте специально показатель был ниже у GCC.В BlastWave репозитории новее нет.
>В BlastWave репозитории новее нет.А как это относится к производительности GCC?У меня вот в убунте gcc 4.3.2 и меня если честно крайне мало колыхает у кого там чего нет :).У меня то есть.
В Sun Studio по умолчанию очень плохая оптимизация. Код может быть в три-четыре раза медленнее, чем для GCC, Intel, PGI, etc. Всегда необходимо использовать -fast, иначе сравнение бессмысленное. Ну вот такое вот поведение у Sun Studio. Для других компиляторов эффект -fast будет незначительным 10-30%.
Если это действительно так, то сам с собой напрашивается вопрос, а почему же OpenSolaris собирают без этого флага?
>почему же OpenSolaris собирают без этого флага?OpenSolaris собирают разные файлы с разными флагами.
Ядро одно дело, стандарный user land - другое, прикладные программы из поставки третье.-fast - это макрос который раскрывается в набор опций (для вудкреста пример).
-xlibmil -xlibmopt -D__MATHERR_ERRNO_DONTCARE
Это флаги регулирующие поведение функций из math.h/libm.so
Замену на более быстрые функции или оптимизированные последовательности.
Ядро с libm не линкуется - поэтому они ему не нужны.-fns -nofstore -fsimple=2 -fsingle
это все упрощения плавающей точки. в ядре в основном целочисленный код.
-xarch=ssse3
это выбор архитектуры SSSE3. Очевидно не подходит для сборки билда общего назначения операционной системы (если б это была gentoo - это было бы приемлимо).
Для amd64 использовался флаг -xarch=amd64 (сейчас, наверное, пишут -m64).
-xcache=32/64/8:4096/64/16 -xchip=core2это заточки под конкретное железо на котором производится компиляция.
-xbuiltin=%allЭтот флаг говорит компилятору заменять известные функции из libc.so и
других стандартных библиотек на оптимизированные последовательности.
Ядро с этими библиотеками, понятное дело, не линкуется - поэтому и тут мимо.
-xdepend=yesВключить dependence analysis циклов.
Вполне подходит для ядра.
Ну и соответственно по крайней мере в /usr/src/Makefile.master он упоминается.
-xregs=frameptrЭто аналог omit-frame-pointer из gcc. Использование регистра BP как регистра общего назначения, а не в качестве указателя кадра стека.
Солярис - система в которой очень ценят наблюдаемость - "observability".
Поэтому этот флаг не используется.
Более того на amd64 используется -Wu,-save_args флаг который говорит компилятору складывать аргументы функций которые по соглашениям о вызовах едут на регистрах
в специально отведенное место на стеке.-xO5
При сборках соляриса используется -xO3.
По сути -xO4 добавляет агрессивный инлайнинг,
а -xO5 может сильно раздуть результирующий код, но не принести реального выирыша.
Инлайнинг в ядре штука мешающая отладке, наблюдаемости и анализу post mortem.
И раздутый код тоже ни к чему. Поэтому, ЕМНИП, используется -xO3.-xalias_level=basic
это обещание компилятору что указатели базовые типы (int*, float*) указывают именно на те
типы на которые написано. Производительность разные подфлаги -xalias_level могут
поднять очень существенно. Но нужно очень внимательно следить за тем что написано в вашем коде. Этот флаг советует компилятору более буквально следовать семантике
записаной в стандарте языка, что часто не соответствует ожиданиям программиста.
Поэтому во избежание.Тем не менее все эти опции так или иначе используются для сборки стандартного user land'а
и прочих программ.
-fast задокументирован как отправная точка настройки вашей программы, некоторый общий знаменатель для получения хорошей производительности.
Стартуя от нее можно заниматься профилировкой и что-то добавлять, а что-то убирать.
>> Так PHP был собран из исходных текстов при помощи Sun Studio за 20 сек., а при помощи GCC за 34 секунды.тут ничего не напутано?
мне бы такую железку на работу
проекты уровня PHP собирабтся за секунды
+1, как-то сборка пхп пакета за 30 секунд звучит несколько стремно
Что значит проекты? они собирали сам PHP, а не проекты, написанные на PHP
у меня за 41 секунду собирается и я бы не сказал что железо какое-то мега: 2*E5410
На самом деле SunCC под Linux очень и очень не плох, позволяет добиться сильно лучшей оптимизации кода в сравнении с GCC 4.3.3. В есть даже такая фича, как профилирование после сборки с записью инфы о работе программы, о горячих и холодных участках кода и сборка компиляция программы уже на основе этой статистике. В GCC такого нету
>На самом деле SunCC под Linux очень и очень не плох, позволяет
>добиться сильно лучшей оптимизации кода в сравнении с GCC 4.3.3. В
>есть даже такая фича, как профилирование после сборки с записью инфы
>о работе программы, о горячих и холодных участках кода и сборка
>компиляция программы уже на основе этой статистике. В GCC такого нету-fprofile-generate
-fprofile-use
>-fprofile-generate
>-fprofile-useЗато у версии 4.3.x GCC регрессия в 30% на 64 битном коде
>Зато у версии 4.3.x GCC регрессия в 30% на 64 битном кодеПруфлинк?Или методы бенчмарка?
http://www.mail-archive.com/gcc@gcc.gnu.org/msg24423.html
>http://www.mail-archive.com/gcc@gcc.gnu.org/msg24423.htmlТам вообще-то о фортране речь идет.
Не факт, что код на C затронут этой проблемой.
>http://www.mail-archive.com/gcc@gcc.gnu.org/msg24423.htmlДык там про какую-то байду на фортране?!Мне фортран неинтересен.Вообще.
Я вообще не понимаю, как можно смотреть на результаты тестов, в которых не указаны команды сборки.
Если они просто CC=cc CXX=CC ./configure && make
то даже смотреть не на что... Из всего, что приходилось собирать под Солярис, только openSll и nginx установили хоть какие-то флаги отптимизации для sunStudio. Причем только nginx сделал все совсем правильно (Спасибо Игорю Сысоеву). А firebird так например вообще упорно добавлял команды оптимизации gcc. гнушные проекты не считают должным знать о других компиляторах...