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:

CPU_FLAGS_* — это a USE_EXPAND-переменная, содержащая набор инструкций и другие связанные с процессором возможности. На данный момент Gentoo поддерживает CPU_FLAGS_X86 (для архитектур amd64 и x86), CPU_FLAGS_ARM (для архитектур arm и arm64) и CPU_FLAGS_PPC (для архитектур ppc и ppc64).

Отличия между 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/make.conf или /etc/portage/package.use:

ФАЙЛ /etc/portage/make.confУстановка CPU_FLAGS_X86
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3"

Если сомневаетесь, то посмотрите описание флагов с помощью одной из доступных утилит. Например 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 переменные для своей процессорной архитектуры.

Emerge

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

Миграция от устаревших USE-флагов

Чтобы не потерять специфичные для процессора оптимизации, пользователи должны будут обновить файл make.conf (и возможно package.use). Например, если присутствовали следующие USE-флаги:

ФАЙЛ /etc/portage/make.conf
USE="mmx mmxext sse sse2 sse3"

Они должны быть перенесены в соответствующую переменную CPU_FLAGS_*.

Сохранение устаревших USE-флагов

Предыдущие USE-флаги, соответствующие поддержке набора инструкций и возможностей, специфичных для архитектур x86/amd64, ppc/ppc64 и arm/arm64, были перенесены в отдельные USE_EXPAND-переменные.

Чтобы обеспечить безопасную миграцию и поддерживать совместимость с внешними репозиториями, рекомендуется сохранять старые настройки USE в течение одного года или до тех пор, пока их не использует интересующий пакет.

Смотрите также

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