LINUX.ORG.RU

Gentoo флаги оптимизации. Правильно или не правильно?

 , , , ,


1

0

Имею:

  • amd64
  • процессор Dual core Intel Core i3-2350M
  • -march=sandybridge -mmmx -mno-3dnow -msse -msse2 -msse3 -mssse3 -mno-sse4a -mcx16 -msahf -mno-movbe -mno-aes -mno-sha -mpclmul -mpopcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rtm -mno-hle -mno-rdrnd -mno-f16c -mno-fsgsbase -mno-rdseed -mno-prfchw -mno-adx -mfxsr -mxsave -mxsaveopt -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-prefetchwt1 --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=sandybridge
  • mmx:            114236
    sse:            47786
    sse2:           153737
    sse3:           24
    ssse3:          2746
    sse4.1:         191
    3dnow!:         612
    3dnowext:               5270
    avx:            28832


Составил примерно следующее для оптимизации именно под свой процессор:

CPU_FLAGS_X86="mmx sse sse2 ssse3 sse4_1 sse4_2" # Это на глаз, потом воспользуюсь cpuinfo2cpuflags.
CFLAGS="-O2 -march=sandybridge -mtune=generic -pipe -mmmx -msse -msse2 -msse3 -mssse3"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j5"
PORTAGE_NICENESS=19
PORTAGE_IONICE_COMMAND="ionice -c 3 -p \${PID}"
А теперь собственно вопросы:

  • Обязательно ли перечислять все инструкции -mmmx -msse -msse2 -msse3 -mssse3 в CFLAGS?
  • Нужен ли -pipe или можно обойтись без него
  • нужен ли -mtune=generic?
  • И самое главное, достаточно ли будет этих флагов или нет - https://bpaste.net/show/4349c768cadf или нужно будет включить еще какие-то флаги?

Прошу специалистов посмотреть, и если что подсказать: что убрать, что добавить, что нужно, что не нужно. Буду благодарен любым советам. Пользовался данной статьёй. Гугл смотрел, но там ведь не скажут правильно или не правильно, и не посоветуют что добавить, что убавить. Может у кого то такой же проц и скажет какие флаги лучше использовать, ну и тд.



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

Неправильно.
Правильно:

-march=native
[/thread]

Deleted
()

Более того, прекращай заморачиваться, на x86_64 особо не наоптимизируешь.

Deleted
()

оставь

CFLAGS="-O2 -march=native -pipe"
и если собираешь в памяти -pipe можно убрать

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

Правильно или не правильно?

Для начала - чего ты хочешь достичь? Если ускорения, то 1) определи для каких приложений 2) измерь до и после, иначе все твои танцы с бубном бесполезны. Система вцелом быстрее не заработает.

Обязательно ли перечислять все инструкции

Нет. Достаточно указать правильный -march (или -mcpu, не помню) и все.

Нужен ли -pipe или можно обойтись без него

Он как бы ускоряет, но повышает потребление памяти. Бенчмарков не делал, но помню что что-то у меня с ним однажды не скомпилилось. У меня в make.conf стоит.

нужен ли -mtune=generic?

Нет.

Вообще вот: https://wiki.gentoo.org/wiki/GCC_optimization

А если хочешь нормально оптимизировать - используй PGO. Вот в двух словах: http://stackoverflow.com/questions/13881292/gcc-profile-guided-optimization-pgo . Но, насколько я знаю, это гемор.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от r3lgar

Мир, дверь, мяч.

Странно, почему мой мозг разгадал этот унылый ребус за секунду. Наверное хватит мне на ЛОРе сидеть

vertexua ★★★★★
()

Ты забыл

-floop-nest-optimize -ftree-loop-distribution -ftree-vectorize -ftree-loop-im -funswitch-loops -ftree-loop-ivcanon -fivopts -ftree-parallelize-loops=4 -ftracer -funroll-loops

Однако, LNO сломает openssl's crypto/asn1, например.

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

мой мозг разгадал этот унылый ребус за секунду

vertexua ☆☆☆☆☆

☆☆☆☆☆

Я бы удивился, если бы ты его не разгадал.

r3lgar ★★★★★
()

CFLAGS="-O2 -march=sandybridge" в CPU_FLAGS_X86 вставляй то что cpuinfo2cpuflags-x86 покажет

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