ループアンロールの利点は次のとおりです。
アンロールにより、分岐およびいくらかのコードが減ります。
変数を有効に保持するのに十分な空きレジスターがある場合は、アンロールにより、積極的にループをスケジューリング (またはパイプライン化) して、遅延を隠せます。
IA-32 アーキテクチャーをベースとしたプロセッサーでは、反復回数が予測可能で、ループ内に条件付き分岐がない場合、反復回数が 16 回以下の内部ループの終了分岐を正しく予測できます。したがって、ループ本体のサイズが大きすぎず、反復の予測回数がわかる場合、プロセッサーの内部ループを、最大 16 の反復回数までアンロールします。
考えられる制限として、過度なアンロール、または非常に大きなループアンロールにより、コードサイズが大きくなる可能性があります。
-unroll[n] オプション (Linux* および Mac OS* X) または /Qunroll:[n] (Windows*) オプションは、インテル® コンパイラーのループアンロール処理方法を制御します。
詳細は、「最適化手法の適用」を参照してください。
Linux* および Mac OS* X |
Windows |
説明 |
---|---|---|
-unrolln |
/Qunroll:n |
ループアンロール回数の上限を指定します。次の例では、ループを 4 回アンロールします。 (Linux* および Mac OS* X) (Windows*) icpc -unroll4 a.cpp (Linux* および Mac OS* X) icl /Qunroll:4 a.cpp (Windows*) 注n の値を省略すると、アンロールを実行するかどうかをコンパイラーが判断します。これはデフォルト設定です。コンパイラーは、デフォルトのヒューリスティックを使用するか、または n を定義します。 n に 0 を渡すと、ループアンロールを無効にします。次の例は、ループアンロールを無効にします。 (Linux* および Mac OS* X) (Windows*) icpc -unroll0 a.cpp (Linux* および Mac OS* X) icl /Qunroll:0 a.cpp (Windows*) |
-funroll-all-loops |
相当するオプションなし |
ループに入った時に反復の回数がわからない場合でも、コンパイラーにすべてのループをアンロールするように指示します。 |
© 1996-2010 Intel Corporation. 無断での引用、転載を禁じます。