ビルド済みのバイナリパフォーマンスのコンパイルと使用?


11

使用する実際のマシンのソフトウェアコンポーネントのソースを手動でコンパイルした方が、おそらく多くの異なるアーキテクチャーの別のプラットフォームでソースをコンパイルした場合と比較して、パフォーマンスが向上します(より高速)?ダウンロードしたソースをコンパイルしていくつかの良い結果が得られました。これは、ソフトウェアの更新でよくあるプリコンパイルされたバイナリをダウンロードする代わりに、それをコンパイルしたためなのかと思います。


2
多くのアーキテクチャーとの互換性のためにコンパイルすると、単一のアーキテクチャー用にコンパイルするときに可能な特定の最適化が排除される可能性があります。
Robert Harvey、

1
ターゲットが絞られていること(ほとんどの場合は有益です)とは別に、コンパイラー間で大きな違いが発生することもあります。コンパイラーごとに異なる最適化がサポートされており、パフォーマンスのボトルネックが片方ではなく片方で最適化される場合があります。
Daniel B

回答:


8

多くの場合(ほとんどではないにしても)、はい。これは、コンパイラが特定のCPUと環境に最適化されたネイティブコードを生成できるためです。コードはより「ターゲットを絞った」ものです。


7

ソースからコンパイルすると、特定のプラットフォームに合わせてコンパイラフラグを設定できるという利点があります。正確に同じ設定でコンパイルされたパッケージをダウンロードしても違いはありませんが、設定をデフォルトから変更すると、大幅に改善できます。

たとえば、ダウンロード用に提供されたバイナリがデバッグ用にコンパイルされている場合(意図的または誤って)、より積極的な最適化をオンにすると、ほぼすべての状況でパフォーマンスが向上します。一方、コンパイルされたコードが最大に最適化されている場合、違いは見られません。


したがって、私のコンパイル作業は無駄ではなかったかもしれません。私はmod_jkにソースをダウンロードしてコンパイルしましたが、それは非常に速くなり、それは手動のコンパイルが原因だったのではないかと思います。答えてくれてありがとう。
Niklas

1

これは実際には、使用される2つのコンパイラとコンパイラフラグに依存します。通常、ローカルマシンのコンパイラとフラグの設定は、正しく構成されている場合、特定のマシンにより適しています。

ただし、たとえば、ビルド済みのバイナリが、次のコンパイラと比較して、はるかに優れた最適化コンパイラ(または、特定のコードに合わせてフラグを調整し、システムに適した運で調整された特別なベンチマーク)でビルドされた場合あなたのシステムでは、あなたのシステム上にあるどんなコンパイラーでも実際に悪いパフォーマンスを生み出す可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.