CPU_FLAGS_*
CPU_FLAGS_* — это a USE_EXPAND-переменная, содержащая набор инструкций и другие связанные с процессором возможности. На данный момент Gentoo поддерживает CPU_FLAGS_X86 (для архитектур amd64 и x86), CPU_FLAGS_ARM (для архитектур arm и arm64) и CPU_FLAGS_PPC (для архитектур ppc и ppc64).
Для дополнительной информации см. раздел CPU_FLAGS_* Руководства пользователя Gentoo.
Отличия между CFLAGS и CPU_FLAGS_*
Распространённым вопросом является «Чем отличается CFLAGS и, к примеру, CPU_FLAGS_X86?»
CPU_FLAGS_* является примером USE_EXPAND-переменной. Он включает определённые параметры в ebuild, которые передаются в систему сборки. Например, CPU_FLAGS_X86_SSE2
, если определён для пакета, включает вручную написанные ассемблерные вставки. Эти параметры включают специфичный код, уже существующий в пакете.
CFLAGS, с другой стороны, просто сообщает компилятору, что ему разрешено попробовать сгенерировать код, использующий по возможности эти инструкции. Это не будет означать, что генерация будет успешной, то есть, -msse2
в CFLAGS не будет означать, что компилятор будет достаточно сообразителен, чтобы сгенерировать SSE2 для определённой функции. Эти параметры просто позволяют компилятору создавать определённый код с определёнными инструкциями.
Поэтому важно настроить CPU_FLAGS_* соответствующим образом, чтобы получить наилучшую производительность пакетов.
Конфигурация
Эти переменные необходимо установить как CPU_FLAGS_X86 (CPU_FLAGS_ARM, CPU_FLAGS_PPC) в /etc/portage/package.use/:
# Это всего лишь пример, запустите утилиту 'cpuid2cpuflags', чтобы получить соответствующие значение для конкретной системы!
*/* cpu_flags_x86: aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt rdrand sse sse2 sse3 sse4_1 sse4_2 ssse3
Если сомневаетесь, то посмотрите описание флагов с помощью одной из доступных утилит. Например equery uses из пакета app-portage/gentoolkit:
user $
equery uses media-video/ffmpeg
Большинство имён флагов совпадают с именами из /proc/cpuinfo, с отличием что sse3
в /proc/cpuinfo называется pni
(также не спутайте с ssse3
).
Использование cpuid2cpuflags
С помощью app-portage/cpuid2cpuflags пользователи могут определить корректные CPU_FLAGS_ USE_EXPAND переменные для своей процессорной архитектуры.
Установка
root #
emerge --ask app-portage/cpuid2cpuflags
Вызов
user $
cpuid2cpuflags
CPU_FLAGS_X86: mmx mmxext sse sse2 sse3
Пример для глобального применения:
root #
echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags
Внешние ресурсы
- Новость New CPU_FLAGS_PPC USE_EXPAND