BINHOST, нужен совет

Всем привет!
Из-за громадного пакета dev-qt/qtwebkit и наличию двух слабых машин решил поднять BINHOST на третьей, более-менее производительной. Согласно wiki, должны быть одинаковые CHOST, CFLAGS, CXXFLAGS и CPU_FLAGS_X86. Конфигурация следующая, CFLAGS для каждой определял через скрипт:

#!/bin/bash
echo $(
    gcc -v -march=native -x c /dev/null 2>&1 \
        | fgrep -- '-march' \
        | egrep -o ' (-m|--param )\S+' \
        | fgrep -v -- '-mno-'
)

CPU_FLAGS_X86 определял через app-portage/cpuid2cpuflags

Итак:
Intel Core i5, 8 GiB (тут планируется BINHOST)

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=sandybridge -mmmx -msse -msse2 -msse3 -mssse3 -mcx16 -msahf -mpclmul -mpopcnt -mavx -msse4.2 -msse4.1 -mfxsr -mxsave -mxsaveopt --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=3072 -mtune=sandybridge"
CXXFLAGS="${CFLAGS}"
CPU_FLAGS_X86="avx mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"

Intel Celeron N3050, 2 GiB

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=silvermont -mmmx -msse -msse2 -msse3 -mssse3 -mcx16 -msahf -mmovbe -maes -mpclmul -mpopcnt -msse4.2 -msse4.1 -mrdrnd -mprfchw -mfxsr --param l1-cache-size=24 --param l1-cache-line-size=64 --param l2-cache-size=1024 -mtune=generic -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CPU_FLAGS_X86="aes mmx mmxext popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"

Intel Core2Duo, 2 GiB

CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=core2 -mmmx -msse -msse2 -msse3 -mssse3 -mcx16 -msahf -mfxsr --param l1-cache-size=32 --param l1-cache-line-size=64 --param l2-cache-size=2048 -mtune=core2 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 ssse3"

Ну и USE тоже должны быть одинаковые, но это уже другой момент.

Стратегия в общем-то ясна, - собирать только с теми флагами, которые есть у всех. Но есть ещё вопросы:
1. Как быть со значениями типа "--param l2-cache-size=2048", ставить одинаковое число?
2. Данные значения -march уже подразумевают -mmmx -msse и др., не будет ли проблем с повторением такого рода?
3. Имеет ли значение (для совместимости) во сколько потоков собирать? (на Core i5 - MAKEOPTS="-j5", на остальных - MAKEOPTS="-j3")

Привет. Ну главное не

Привет. Ну главное не забывать, что основное требование это наличие на всех хостах одинаковой версии gcc. Иначе танцы с бубном гарантированы.
Читать о CFLAGS и CXXFLAGS тут

Ты случаем с DISTCC не путаешь?.. ;)

Ты случаем с DISTCC не путаешь?.. ;)

Но в принципе ты прав, а также linux-headers и glibc (весь тулчейн) должны быть одинаковыми, но это как бы очевидно.

Для простоты понимания:

Для простоты понимания: основная идея в том, чтобы бинарники были совместимыми и могли бы исполняться на всех машинах, которые пользуются этим ресурсом.

Поэтому MAKEOPTS - пофиг, он используется только локально при компиляции, а вот разные mtune могут быть проблемой, если компилятор будет не только сам пользоваться, но и вставлять "оптимизированные" куски в бинарники. Я не настолько знаком с работой самого компилятора. Кстати, а зачем такие сложные флаги?! Практика показывает, что ускорение если и есть, то весьма символическое и не стоит усложнения конфигураций. Но это для больших ферм, конечно. Дома, наверное, можно себе позволить такие игры ради пары процентов ускорения... :) Хотя я и дома уже больше 15 лет использую только CFLAGS="-O2 -pipe" (не считая march, конечно) и конфиги кочуют с машины на машину...

В общем, руководствуйся принципом из первой строчки.

Согласен. А тут можно

Согласен.
А тут можно почитать более подробно об опциях gcc, какая за что отвечает. Может пригодиться.

SysA написал(а): Практика

SysA написал(а):
Практика показывает, что ускорение если и есть, то весьма символическое и не стоит усложнения конфигураций. Но это для больших ферм, конечно. Дома, наверное, можно себе позволить такие игры ради пары процентов ускорения... :) Хотя я и дома уже больше 15 лет использую только CFLAGS="-O2 -pipe" (не считая march, конечно) и конфиги кочуют с машины на машину...

Дык, я тоже не фанат кучи флагов, везде стоит CFLAGS="-march=native -O2 -pipe". И вся загвоздка в том, что native для каждого проца свой (т.е. разный набор других флагов).
Собственно для этого я и использовал скрипт для получения спектра флагов native на каждом процессоре.

.

sspphheerraa написал(а):
Дык, я тоже не фанат кучи флагов, везде стоит CFLAGS="-march=native -O2 -pipe". И вся загвоздка в том, что native для каждого проца свой (т.е. разный набор других флагов).
Собственно для этого я и использовал скрипт для получения спектра флагов native на каждом процессоре.

Можно откатиться на генерик.
См. мой комментарий в ЧаВо.
http://www.gentoo.ru/content/u-menya-processor-imyarek-chto-podstavlyat-v-peremennuyu-cflags#comment-208019

:wq
--
Live free or die

А если вообще не указывать

А если вообще не указывать march?
Что по-умолчанию будет использоваться если поставить CFLAGS="-O2 -pipe" как на оффициальных stage3?

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".