LINUX.ORG.RU

Снижение производительности при использовании GCC-4.5.0

 , , ,


0

0

14-го апреля этого года GNU выпустила GCC-4.5.0. И вот теперь стало известно, что при компиляции с ключом -Os (оптимизация по размеру исполняемого файла) полученный исполняемый файл работает гораздо медленнее, чем скомпилированный с теми же параметрами компилятором версии 4.3.

В списке рассылки разработчики GCC поясняют, что это связано с новой логикой разворачивания iniline-вставок при оптимизации -Os: теперь они разворачиваются только если это приведёт к уменьшению размера исполняемого файла (ревизии 158278 и 159931).

Изменения привели, например, к тому, что браузер FireFox при сборке GCC-4.5 теряет на различных тестах от 4 до 19 процентов производительности, причём и в 32, и в 64-битной сборке.

>>> Подробности

★★

Проверено: anonymous_incognito ()
Последнее исправление: name_no (всего исправлений: 1)

Ответ на: комментарий от mx__

>они переписывают код на Си а часть даже на асм ...

Кэп, я это отлично понимаю, но в данной новости обсуждается как раз оптимизация кода с использованием опция компилятора. Я знаю, что какой нить адский задрот может все накатать в машкоде и получить самый крутой и оптимизированный код, однако это слишком большие трудозатраты. Я думаю все понимают, что код, который выдает компилятор при переводе с языка высокого уровня в ассемблер довольно таки хреновый, однако языки высокого уровня позволяют создавать некоторые вещи быстрее, чем если бы это писалось на ассемблере.

rave
()
Ответ на: комментарий от Sylvia

−march=cpu-type Generate instructions for the machine type cpu-type. The choices for cpu-type are the same as for −mtune. Moreover, specifying −march=cpu-type implies −mtune=cpu-type.

−mcpu=cpu-type A deprecated synonym for −mtune.

Ну это то да. Но всегда вчитываясь в этот кусок man gcc, я не понимал - а разница то в чем. Гугл ответов особых не дал)

rave
()
Ответ на: комментарий от rave

слаку собирают с -march=i486 -mtune=i686
это значит что будет использован набор инструкций i486 и работать бинарники будут на i486,
но будет расчет на cpu scheduler i686 и старше, что позволит сохраняя совместимость с более старым процессором все же оптимизировать на запуск на современном

Sylvia ★★★★★
()
Ответ на: комментарий от rave

-march=core2
автоматически установит core2 и в mtune, если mtune не был задан пользователем,

если же march и mtune были заданы, то будут использованы пользовательские значения
( например -march=i686 -mtune=core2 будет собирать с оптимизацией для core2 , но работать это будет на pentium2 и выше не вываливаясь с illegal instruction )
строчка говорит всего лишь о том, что если задали -march=Proc , то -mtune=Proc
можно не писать,

Sylvia ★★★★★
()

собрал Seamonkey 2.0.5 . Субъективно не медленне, чем 2.0.4, собранная на 4.3.3 .

собрал blender 2.5. Субъективно не медленне, чем 2.49a, собранный на 4.3.3 .

AGUtilities ★★★
()

При чем тут фаерфокс?

oh
()
Ответ на: комментарий от rave

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

Неочевидно и, более того, зачастую неверно. Неоднократно встречал ситуации когда компилятор использовал очень интересные приемы оптимизации. Конечно, все эти приемы изобретены людьми, никто не спорит, но применение этих приемов желательно поручить машине. Опять же, оптимизировать код под размер строки кэша вручную... Вы шутите?

A-234 ★★★★★
()
Ответ на: комментарий от rave

> код, который выдает компилятор при переводе с языка высокого уровня в ассемблер довольно таки хреновый?

Ы? Если собирать без оптимизации, то да. Но если собирать с оптимизацией… Неужели кто-то вручную будет выполнять планирование инструкций, считать всякие AGI и прочие вещи?

sjinks ★★★
()
Ответ на: комментарий от Sylvia
Intel(R) Celeron(R) M CPU        430  @ 1.73GHz

peacekeeper:
956

Rendering
1177
Social networking
929
Complex graphics
1846
Data
1377
DOM operations
622
Text parsing
853

www2.webkit.org:


============================================
RESULTS (means and 95% confidence intervals)
--------------------------------------------
Total:                 2510.8ms +/- 0.7%
--------------------------------------------

  3d:                   353.2ms +/- 0.4%
    cube:               126.6ms +/- 1.6%
    morph:               67.0ms +/- 0.0%
    raytrace:           159.6ms +/- 1.2%

  access:               373.8ms +/- 1.2%
    binary-trees:       159.2ms +/- 2.7%
    fannkuch:           127.6ms +/- 0.5%
    nbody:               64.8ms +/- 0.9%
    nsieve:              22.2ms +/- 2.5%

  bitops:                72.2ms +/- 3.1%
    3bit-bits-in-byte:    2.6ms +/- 26.2%
    bits-in-byte:        14.6ms +/- 4.7%
    bitwise-and:          3.6ms +/- 18.9%
    nsieve-bits:         51.4ms +/- 1.3%

  controlflow:          158.2ms +/- 2.6%
    recursive:          158.2ms +/- 2.6%

  crypto:               124.8ms +/- 3.0%
    aes:                 71.2ms +/- 5.3%
    md5:                 35.6ms +/- 1.9%
    sha1:                18.0ms +/- 0.0%

  date:                 372.4ms +/- 1.9%
    format-tofte:       228.4ms +/- 1.5%
    format-xparb:       144.0ms +/- 3.0%

  math:                 110.2ms +/- 1.5%
    cordic:              49.6ms +/- 1.4%
    partial-sums:        46.4ms +/- 1.5%
    spectral-norm:       14.2ms +/- 7.3%

  regexp:               190.6ms +/- 3.5%
    dna:                190.6ms +/- 3.5%

  string:               755.4ms +/- 1.1%
    base64:              34.6ms +/- 17.0%
    fasta:              158.6ms +/- 2.9%
    tagcloud:           234.2ms +/- 0.8%
    unpack-code:        241.2ms +/- 2.2%
    validate-input:      86.8ms +/- 1.6%


v8:

Score: 147
Richards: 735
DeltaBlue: 26.6
Crypto: 292
RayTrace: 87.6
EarleyBoyer: 108
RegExp: 133
Splay: 207
AGUtilities ★★★
()
Ответ на: комментарий от Sylvia

А нет ли у вас в запасе сслылочки где доступным языком описано как выставтить глобальные флаги компиляции и самое главное какие лучше выбрать для своего процессора? желательно на русском (хотя не обязательно) и чтобы было не углубленно ддля програмистов а на более пользовательском уровне обьяснено. Процессор если что AMD Phenom(tm) 9550 Quad-Core.

Зарание спасибо.

Behem0th ★★★★★
()
Ответ на: комментарий от AGUtilities

>Субъективно не медленне, чем 2.0.4, собранная на 4.3.3 .

Кто же так сравнивает? Хоть бы бенчмарки запустили: SunSpider/Peacekeeper, а для блендера попробовали бы что-нибудь отрендерить

X-Pilot ★★★★★
()
Ответ на: комментарий от rave

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

Эх, сразу видно, что на асме не писали.

Компиляторы выдают очень качественный код, т.к. банально распределить регистры (это NP-полная задача вообще-то), сгруппировать инструкции (чтоб параллельно разными конвеерами исполнялись), рассчитывать заполнение кеша etc. это очень сложно, а всякие элементарные вещи (типа вместо «mov eax, 0FFFFFFFFh» вставлять «xor eax, eax / dec eax») они уже лет 20 как научились. Единственная проблема это SIMD, да и это вопрос времени скорее.

mix_mix ★★★★★
()
Ответ на: комментарий от Sylvia
Intel(R) Celeron(R) M CPU        430  @ 1.73GHz

peacekeeper:

2.0.5:

956

Rendering
1177
Social networking
929
Complex graphics
1846
Data
1377
DOM operations
622
Text parsing
853

2.0.4:

1042 Points

Rendering
1292
Social networking
1085
Complex graphics
1790
Data
1480
DOM operations
688
Text parsing
861

эх, похоже, что действительно.

но с другой стороны, потеря незначительна. главное, чтобы не глючило :)

AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

в конце-концов, проблемы были и у нулевых 4.3 - исправят

AGUtilities ★★★
()
Ответ на: комментарий от mix_mix

>Эх, сразу видно, что на асме не писали

Да, не писал. Я веду лишь к тому, что если сесть писать на асме и написать программу, максимально оптимизированную под твой CPU (с учетом всех его особенностей), то она будет работать быстрее, чем та, что получена компиляцией того же C с оптимизацией.

rave
()

Ну што за фигня. Бинарники должны ускоряться а не тормозиться с каждой новой версией. На то она и новая, я считаю, версия, чтоб быть круче предыдущей. А это - микрософтway какой-то выходит.

trueshell ★★★★★
()
Ответ на: комментарий от AGUtilities

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

frost_ii ★★★★★
()
Ответ на: комментарий от trueshell

Новость о том, что её автор не понимает, как пользоваться флагами и выбрать нужные опции.

frost_ii ★★★★★
()
Ответ на: комментарий от trueshell

>Ну што за фигня.

Перечитайте «новость» внимательно, еще раз. А вообще, её IMO необходимо удалить как откровенный бред, один только дезориентирующий заголовок чего стоит.

sinister666 ★★
()
Ответ на: комментарий от megabaks

а толку с векторизации на десктопных приложениях ?) там же _SAFE_
flags, а не I_want_to_emerge_and_re-emerge-cflags
отдельные пакеты можно и со своими флагами собирать, а общего плана - -O2 -march=* -fomit-frame-pointer -msse*




Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>-O2 -march=* -fomit-frame-pointer -msse*
дык выяснили же экспериментальным путём - последний без векторизации или -mfpmath бесполезен

megabaks ★★★★
()
Ответ на: комментарий от megabaks

медиа кодеки
компрессия
математика любого рода

к тому же стоит учесть что многое итак содержит asm вставки, которые в генте включаются USE= sse sse2 и т п (а в большинстве дистрибутивов все же отключаются для совместимости с древними компами!)

к тому же векторизация напрашивает -mstackrealign, с которым например ООО из за asm вставок ( есть где-то в багзиллах ) собирается некорректно

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

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

megabaks ★★★★
()
Ответ на: комментарий от megabaks

я же написала что не на любом
взять слаку
openssl допустим, там явным образом отключено sse2 на x86,
Атом 1.6 способен давать поток для sshfs в 8 Mb/s
пересборка с SSE и -march=atom делает полноценные 12 Mb/s (до 100 мбит + служебка ) и процессор загружен на 85%, ощутимо не так ли?

и это без -ftree-vectorize, тот же pixman для графике в слаке не использует sse2 asm

Sylvia ★★★★★
()

По поводу дискуссии об оптимизации под размер кэша:
есть такая технология, как LWP (легковесное профилирование), при использовании которой процессор при выполнении кода собирает статистику промахов кэша, неправильно предсказанных переходов и т. п., а (JIT-)компилятор на её основе проводит оптимизацию. Впрочем, это для новых, ещё не вышедших процессоров AMD только будет.

anonymfus ★★★★
()

>> теперь они разворачиваются только если это приведёт к уменьшению размера исполняемого файла

смешно

kto_tama ★★★★★
()
Ответ на: комментарий от Sylvia

> в отличие от c++

Ну так еще бы! Если писать определение метода непосредственно в определении класса, то такой метод трактуется как inline-функция. А теперь всякие геттеры/сеттеры (которые часто реализуются прямо в определении класса и, как следствие, разворачиваются) перестали разворачиваться. В результате получаются затраты на передачу/очистку аргументов и вызов метода. Получается медленнее.

sjinks ★★★
()
Ответ на: комментарий от kto_tama

смешно

А зря. Разворачивание может привести к уменьшению размера.

Простой пример:

class T {
private:
    int a;
public:
    int getA(void) const { return this->a; }
};

Если развернуть T::getA(), то получим одну-две ассемблерные инструкции, если не разворачивать — то в довесок к ним получим еще call + ret. Правда, если T::getA() вызывается часто, то оптимизатор разворачивать её (теперь) не будет.

Ну или если функция вызывается только один раз, есть смысл ее развернуть.

sjinks ★★★
()

Неосиляторы из RifeFox просто смешны в своей тупизне! (Rife - «изобилующий; кишащий»)

matumba ★★★★★
()
Ответ на: комментарий от Sylvia

А если заставить его собираться с -mmmx, -msse*, векторизацией и тп - что-нибудь хорошее из этого получится?

madcore ★★★★★
()
Ответ на: комментарий от mkfifo

если новость про -Os, то какого фига автор новости ничего не сказал про размер?


Потому что копипастил с секлаба :)

vada ★★★★★
()

Firefox <------------------------------------------------------------------------------> Производительность

mutronix ★★★★
()
Ответ на: комментарий от madcore

>что-нибудь хорошее из этого получится?
мне думается будут геморы со стабильностью...

megabaks ★★★★
()
Ответ на: комментарий от Sylvia

Не могли бы Вы уточнить какие asm вставки включаются в генте с помощью вышеуказанных юз флагов?

anonymous
()
Ответ на: комментарий от Lumi

скорость запуска такого жирного блоба, как фирефокс, это главный субъективный критерий скорости.

AVL2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.