# Опять про CFLAGS

## Alen

Не мог бы кто нибуть из мудрых прокомментировать вот это:

runacovea -config gcc33_pentium3.acovea -bench evobench.c   

run complete time: 2005 Sep 02 14:21:54

optimistic options:

          -fno-merge-constants (1.173)

                        -fgcse (2.526)

                   -fforce-mem (2.043)

             -fschedule-insns2 (2.284)

                     -fregmove (1.318)

            -finline-functions (1.076)

                     -mieee-fp (1.221)

                -mno-push-args (1.559)

    -maccumulate-outgoing-args (1.221)

               -fno-math-errno (1.028)

            -ffinite-math-only (1.124)

pessimistic options:

      -foptimize-sibling-calls (-1.486)

        -frerun-cse-after-loop (-1.244)

              -fschedule-insns (-1.003)

             -freduce-all-givs (-1.051)

                      -fnew-ra (-1.486)

            -funroll-all-loops (-1.341)

          -mno-align-stringops (-1.293)

                  -mfpmath=387 (-1.776)

              -mfpmath=sse,387 (-1.631)

          -fomit-frame-pointer (-1.969)

     -momit-leaf-frame-pointer (-1.293)

система -  iP4 2,8/512/200Gb

Какие из этиз опций включать в make.conf, если оптимистичные, то почему в пессимистичных находится  -fomit-frame-pointer, который ну просто везде рекомендуют, кроме того странно выглядит то что sse снижает производительность, а опции про ММХ вообще нет нигде :-\

----------

## rusxakep

*  app-benchmarks/acovea

      Latest version available: 4.0.0

      Latest version installed: [ Not Installed ]

      Size of downloaded files: 325 kB

      Homepage:    http://www.coyotegulch.com/products/acovea/

      Description: Analysis of Compiler Options via Evolutionary Algorithm

      License:     GPL-2

Ну пессимистичность и оптимистичность связанна с конкретной ТВОЕЙ системой. Нормальное распределение не гарантирует что все будут подходит под одну конфигурацию. Даже общую. Тести  :Smile: 

P.S: Почему gcc 3.3? Почему P3? У тебя же P4! Какой у тебя gcc?

----------

## Alen

 *rusxakep wrote:*   

> * Ну пессимистичность и оптимистичность связанна с конкретной ТВОЕЙ системой. Нормальное распределение не гарантирует что все будут подходит под одну конфигурацию. Даже общую. Тести 

 

 :Smile: 

 *rusxakep wrote:*   

> P.S: Почему gcc 3.3? Почему P3? У тебя же P4! Какой у тебя gcc?

 

gcc-config -c

i686-pc-linux-gnu-3.3.6

П3 - по тому что надо будет потом клонировать систему на пару машинок с таким камнем, а компилять там не охота ибо вся молодость пройдет ждать  :Smile: 

 а для П4 флаги у меня выгледят вот так:

runacovea -config gcc33_pentium4.acovea -bench evobench.c   

run complete time: 2005 Sep 04 10:13:05

optimistic options:

            -fno-if-conversion (1.124)

           -fno-delayed-branch (1.649)

                        -fgcse (2.218)

                   -fforce-mem (1.693)

             -fschedule-insns2 (1.605)

                     -fregmove (1.343)

            -fsched-interblock (1.43)

                 -ffloat-store (1.343)

    -maccumulate-outgoing-args (1.43)

pessimistic options:

     -fexpensive-optimizations (-1.588)

                -falign-labels (-1.151)

                   -fno-inline (-1.107)

                      -fnew-ra (-1.676)

                -funroll-loops (-1.851)

            -funroll-all-loops (-1.501)

                  -mfpmath=sse (-2.157)

              -mfpmath=sse,387 (-2.113)

          -fomit-frame-pointer (-2.07)

            -ffinite-math-only (-1.282)

... ясности это не добавляет  :Smile: 

----------

## rusxakep

А сколько времени этот бенч работает - я устал ждать  :Wink: 

----------

## micmic

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

----------

## Laitr Keiows

 *Alen wrote:*   

> 
> 
> gcc-config -c
> 
> i686-pc-linux-gnu-3.3.6
> ...

 

Так 3.4 есть уже.

Имхо тестировать надо там же где и будет использоваться система.

Кроме того многие предположительно «полезные» флаги могут отрицательно сказаться на стабильности системы.

Ну, кроме ядра: там все по-своему компилируется.

----------

## rusxakep

3.4 есть - но еще в ~x86   :Rolling Eyes: 

----------

## Alen

Люди, кидайте в топик спецификации ваших систем и что бенчмарк выдал (после ночи работы  :Wink: )

а там глядишь по накопившейся статистике выводы какие нибуть сделаем полезные!

----------

## Alex_5252

test application: /usr/share/acovea/benchmarks/evobench.c 

config description: GCC 3.3 Pentium 3 (ia32) 

test configuration: gcc33_pentium3.acovea 

acovea version: 4.0.0 

evocosm version: 2.5.2 

test start time: 2005 Oct 15 17:37:31 

# of populations: 5 

population size: 40 

survival rate: 10% (4) 

migration rate: 5% (2) 

mutation rate: 1% 

crossover rate: 100% 

fitness scaling: windowed 

generations to run: 20 

random number seed: 2228856555 

optimistic options: 

-fgcse (2.339) 

-fexpensive-optimizations (1.377) 

-fstrength-reduce (1.42) 

-fschedule-insns2 (1.858) 

-fsched-interblock (1.114) 

-fsched-spec (1.508) 

-falign-loops (1.158) 

-finline-functions (1.333) 

-freduce-all-givs (1.202) 

-mno-align-stringops (1.027) 

-funsafe-math-optimizations (1.464) 

-fno-signaling-nans (1.114) 

pessimistic options: 

-fno-if-conversion (-1.248) 

-fno-crossjumping (-1.598) 

-foptimize-sibling-calls (-1.292) 

-fforce-mem (-1.117) 

-fschedule-insns (-1.992) 

-fregmove (-1.117) 

-fprefetch-loop-arrays (-1.161) 

-funroll-all-loops (-1.336) 

-mfpmath=sse (-2.036) 

-mfpmath=sse,387 (-1.336) 

-fomit-frame-pointer (-1.817) 

-ffinite-math-only (-1.3 

Сейчас стоят опции в make.conf 

CHOST="i686-pc-linux-gnu" 

CFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer" 

CXXFLAGS="-march=pentium3 -O3 -pipe -fomit-frame-pointer" 

MAKEOPTS="-j2" 

Так что получается стоит нехорошая опция... 

Теперь, интересно, какие опции - безопасные... 

Система Celeron 800, ОЗУ - 128.

----------

## spijon

А чё означают эти циферки справа от названия флага?

-fgcse (2.339)

Например 2.339 - это на сколько процентов оно может оптимизировать код?

----------

## Behivor

вопрос:

чтобы использовать новые флаги - это надо пересобирать весь world?

----------

## pv

 *Behivor wrote:*   

> вопрос:
> 
> чтобы использовать новые флаги - это надо пересобирать весь world?

 

Теоретически - да.

Практически некоторые (а может, многие) ebuildы фильтруют флаги. Некоторые из них убирают опасные по их мнению флаги, другие вообще убирают все кроме -march=..., а любую оптимизацию заменяют на -O2.

gcc, binutils, glibc, openoffice стопудово так поступают.

Идея в том, что glibc, например, в первозданном виде (с gnu.org) не собирается с сильной оптимизацией, или собирается некорректно (глючит). Документация для gcc, binutils, glibc говорит: собирайте с опциями по умолчанию. Хотя я сам собирал binutils с довольно сильной оптимизацией (-march=... -O3 -fpmath=sse ...), и - ничего, нормально. Однако ручная сборка glibc не прокатила. ДАЖЕ С -O1!

Так что, правильный ответ на твой вопрос: НЕТ. Например, openoffice собирается с -O2 -march=... при любых CFLAGS. То есть пересборка его - зря потерянные 5-6 часов (AthlonXP 2500+, 512MB) твоей жизни.

Другое дело, как узнать, фильтруются ли флаги. Я лично устанавливаю что-нибудь нетривиальное и начинаю сборку. По ходу смотрю на вывод компилятора. Если флаги мои - всё нормально, если же нет, пересобирать бессмысленно.

Использованные при сборке уже установленного пакета флаги сохраняются в /var/db/pkg/<группа>/<пакет>/CFLAGS.

Не знаю, но ещё, может, существует аналог 'emerge --newuse'.

----------

