2015-10-01 22 views
5

Oracle Java 7(または8)Hotspot VMによって実行されるループ最適化について教えてください。ループ最適化Oracle Java 7-8ホットスポットVM

+3

コンパイラの作者はおそらく...しかし、私は彼らがそうすることはできません。とにかく、あなたが本当に知りたいのであれば、いつでもOpenJDKのソースツリーをダウンロードして、自分でそれを理解することができます。 –

+0

主なものは、おそらくデッドコードの除去、ループアンローリングと可変ホイストです。 – assylias

+4

@クローズ投票者:オフサイトのリソースをどこまで求めていますか?現在の答えを見てください。 (もちろん、その中にはたくさんのリンクがありますが、これらは耐久性のあるリソース(つまり、OpenJDKソース)へのポインタに過ぎず、今後の研究を意図しています)。 – Marco13

答えて

12
  • Range Check Elimination - ループ不変配列の範囲チェックを排除します。詳細は、PhaseIdealLoop::do_range_checkを参照してください。最適化はフラグによって制御されます-XX:+RangeCheckElimination
  • Loop Peeling - ループから最初の反復を分割し、ループ本体の外側で実行します。ここでの驚くべき説明を参照してくださいPhaseIdealLoop::do_peeling。この最適化は、フラグによって制御されます-XX:PartialPeelLoop=true
  • Loop Predication - ループボディの内部から状態チェックを削除します。現在、配列の範囲チェックやループ不変条件のチェック(ヌルチェックや配列チェックなど)を削除するために、ループ予測最適化が適用されています。ループ予測は-XX:+UseLoopPredicateによって制御されます。コードPhaseIdealLoop::loop_predication_impl
  • Loop Unrolling - をSuperword Level Parallelismの最初のステップとして使用します。 PhaseIdealLoop::do_unrollを参照してください。ループアンローリングは、次のプロパティによって制御されます。-XX:LoopMaxUnroll=16および-XX:LoopUnrollMin=4
  • 配列の塗りつぶし - 塗りつぶしパターンをintriscに置き換えます。 PhaseIdealLoop::do_intrinsify_fillを参照してください。 JVMオプション-XX:+OptimizeFill
  • ベクトル化 - 配列の初期化、コピー、および算術演算を、展開されていないループのベクトル演算で置き換えます。ホットスポットコンパイラはSuperword Level Parallelismのコンセプトをsuperword.cppに実装しています。 JVMオプションも参照してください。-XX:+UseSuperWord
+0

あなたはここで地獄の研究をしました! + Integer.MaxIntあなたに! –

+0

非常に役に立ちました!彼女の補完的な情報:[HotSpot JVMのVectorizaAon] Vladimir Ivanov、HotSpot JVM Compiler、Oracle Corp. 2001年4月8日](http://cr.openjdk.java.net/~vlivanov/talks/2017_Vectorization_in_HotSpot_JVM.pdf) – apete