プロジェクトでは、特定のシステムのパフォーマンスを最大化するために、さまざまなCPUを使用してさまざまな* NIXオペレーティング・システムおよび関連パッケージをコンパイルする予定です。時間とコストを節約するために、同様のアーキテクチャを使用してコンパイルされたコード間に実際に違いがあるかどうかを知りたいです。
例えば: コンパイルするとDebian GNU/Linux+ Intel Core用のデフォルトリポジトリのすべてのパッケージが付属しています。i7-8700Intel Core を搭載したシステムでオペレーティングシステムを使用する場合i7-8650U、実行効果が私が使用しているものと一致していますか?i7-8650Uそれともパフォーマンスが少し低下しますか? (比率は関係ありません1%でも知りたいです)
つまり、0より大きい値が存在するか(0)同じ世代の他のCPUモデルからコードをコンパイルしますか?そうでない場合は、各製造元の各世代から1つのCPUをインポートしてから、他のすべてのモデルで停止するためです。
答え1
実際に最適化を最大化したい場合は、プロセッサのキャッシュサイズを知ることに依存する最適化を含む、ターゲット固有の最適化を使用します。これは-march
、適切な設定を使用して、利用可能な最速のプロセッサの他のプロセッサに対してコンパイルできますが、ほぼ確実にプロセッサごとに一度コンパイルしたいことを意味します-mtune
。
答え2
2つの異なる質問を混同しているようです。コードのコンパイルに使用されるアーキテクチャは、必ずしもコンパイラによって生成されたコードに対して何の意味もありません。たとえば、次のことを考えてみましょう。
$ gcc -o hello hello.c
特定のバージョンでは、gcc
デフォルトのCPUに関係なく、特定のハードウェアアーキテクチャに対して同じコードを生成できます。
しかし、いくつかの例外があります。たとえば、この-march=native
フラグはコンパイラがローカルコンピュータCPUのパフォーマンスを利用できるコードを生成するようにします。ただし、そのような場合でも、march
コンピュータのCPUアーキテクチャとは異なる値を明示的に指定でき、コンパイラはコンピュータで実行されない可能性があるコードを生成します。