The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Сравнение производительности Sun Studio 12, GCC 3.4 и GCC 4.0"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Сравнение производительности Sun Studio 12, GCC 3.4 и GCC 4...." +/
Сообщение от horsh (??), 22-Фев-09, 02:05 
>почему же 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 задокументирован как отправная точка настройки вашей программы, некоторый общий знаменатель для получения хорошей производительности.
Стартуя от нее можно заниматься профилировкой и что-то добавлять, а что-то убирать.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Сравнение производительности Sun Studio 12, GCC 3.4 и GCC 4.0, opennews, 20-Фев-09, 23:30  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру