CPU_FLAGS_*

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page CPU FLAGS * and the translation is 100% complete.
Other languages:
Не следует путать с CFLAGS.


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/:

ФАЙЛ /etc/portage/package.use/my-cpu-flagsУстановка CPU_FLAGS_X86
# Это всего лишь пример, запустите утилиту '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

Внешние ресурсы