3

Java プログラムは、特定のタスクにおいて、C などのコンパイル済みプログラミング言語よりも優れたパフォーマンスを発揮します。これは、JVM にランタイム情報があり、必要に応じて JIT コンパイルを行うためです (推測)。

(例: http://benchmarksgame.alioth.debian.org/u32/performance.php?test=chameneosredux )

コンパイルされた言語にこのようなものはありますか? (私はまずCに興味があります)

ソースをコンパイルした後、開発者はそれを実行し、典型的なワークロードを模倣しようとします。ツールは実行に関する情報を収集し、このデータに従って再コンパイルします。

4

3 に答える 3

1

gccには-fprofile-arcs

マンページから:

-fprofile-arcs
    プログラム フロー アークが計測されるようにコードを追加します。実行中、
    プログラムは、各分岐と呼び出しが実行された回数と回数を記録します
    それが取られるか、または戻る回。コンパイルされたプログラムが終了すると、これが保存されます
    ソース ファイルごとに auxname.gcda という名前のファイルにデータを保存します。データは
    プロファイル指向の最適化 (-fbranch-probabilities)、または
    テスト カバレッジ分析 (-ftest-coverage)。
于 2014-12-16T13:09:31.317 に答える
0

はい、このようなツールがいくつかあります。「プロファイラーに基づく最適化」として知られていると思います。

いくつかの最適化があります。重要なのは、バッキング ストアのページングとコード キャッシュの使用を減らすことです。最新のプロセッサの多くは、コード キャッシュを 1 つ、場合によっては 2 番目のレベルのコード キャッシュ、または 2 番目のデータとコードの統合キャッシュ、場合によっては 3 番目のレベルのキャッシュを備えています。

最も簡単な方法は、最も頻繁に使用するすべての関数を、実行可能ファイル内の 1 つの場所 (最初など) に移動することです。より洗練されたのは、あまり頻繁に行われないブランチをファイルのまったく別の部分に移動することです。

PowerPC などの一部の命令セット アーキテクチャには、マシン コードに分岐予測ビットがあります。プロファイラーに基づく最適化は、これらをより有利に設定しようとします。

Apple は、「MrPlus」と呼ばれるツールを使用して、これを Macintosh Programmer's Workshop (Classic Mac OS 用) に提供していました。GCCでできると思います。LLVM でできると思いますが、方法がわかりません。

于 2014-12-16T13:01:32.290 に答える