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.
これと混同しないでください: CFLAGS.


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_* の違い

よくある質問は、「CFLAGSCPU_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_ARMCPU_FLAGS_PPC) 変数として設定する必要があります:

ファイル /etc/portage/package.use/my-cpu-flagsCPU_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/gentoolkitequery 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

外部資料