CPU_FLAGS_*
CPU_FLAGS_* は、CPU の命令セットや他の特殊機能を含む USE_EXPAND 変数です。現在 Gentoo は CPU_FLAGS_X86 ( amd64 および x86 アーキテクチャ向け)、 CPU_FLAGS_ARM ( arm および arm64 アーキテクチャ向け)、および CPU_FLAGS_PPC ( ppc および ppc64 アーキテクチャ向け) をサポートしています。
さらなる情報については、Gentoo ハンドブックの CPU_FLAGS_* の節を参照してください。
CFLAGS と CPU_FLAGS_* の違い
よくある質問は、「 CFLAGS と CPU_FLAGS_X86 などの違いは何ですか?」というものです。
CPU_FLAGS_*
は
USE_EXPAND
の一例です。これは、ebuild 内でビルドシステムに渡される特定のオプションを有効化します。例えば、
CPU_FLAGS_X86_SSE2
がパッケージで定義されていれば、このオプションは手書きされた ASM を有効化するでしょう。これらのオプションは、パッケージ内にすでに存在する
特定のコードを有効化します
。
一方で
CFLAGS
は単に、可能であればそのような命令を使用するコードの
生成
しようとすることが
許可
されることを、コンパイラに伝えるために使用されます。そのような生成が成功するとは限りません。
CFLAGS
に例えば
-msse2
を設定しても、コンパイラは特定の関数のために SSE2 を生成できるほど賢くないかもしれません。これらのオプションは、
特定の命令を含む特定のコードの生成を、単にコンパイラに許可するだけです
。
そのため、パッケージの最高のパフォーマンスを得るには CPU_FLAGS_* を適切に設定するのが重要です。
設定
これらの変数を、 /etc/portage/package.use 内のファイル内で CPU_FLAGS_X86 ( CPU_FLAGS_ARM 、 CPU_FLAGS_PPC ) 変数として設定する必要があります:
/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
疑問に思うことがあった場合には、 app-portage/gentoolkit の equery uses のような一般的なツールを利用してフラグの説明を調べてください。
user
$
equery uses media-video/ffmpeg
ほとんどのフラグ名は
/proc/cpuinfo
での名前と一致します。注目すべき例外が
sse3
で、これは
/proc/cpuinfo
では
pni
と呼ばれています(また、これを別物である
ssse3
と混同しないでください。)。
cpuid2cpuflags を使用する
app-portage/cpuid2cpuflags は、使用中の CPU アーキテクチャに対応する正しい 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
外部資料
- ニュース項目: new CPU_FLAGS_PPC USE_EXPAND