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/ :
/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
Внешние ресурсы
- Новость New CPU_FLAGS_PPC USE_EXPAND