ループのアンロールの利点は次のとおりです。
アンロールにより、分岐およびいくらかのコードが減ります。
変数を有効に保持するのに十分な空きレジスターがある場合は、アンロールにより、積極的にループをスケジューリング (またはパイプライン化) して、遅延を隠せます。
反復回数が予測可能で、ループ内に条件付き分岐がない場合、インテル(R) Pentium(R) 4 プロセッサーおよびインテル(R) Xeon(R) プロセッサーは、反復回数が 16 回以下の内部ループの終了分岐を正しく予測できます。したがって、ループ本体のサイズが大きすぎず、反復の予測回数がわかる場合、
Pentium 4 プロセッサーの内部ループを、最大 16 の反復回数までアンロールします。
Pentium III プロセッサーまたは Pentium II プロセッサーの内部ループを、最大 4 の反復回数までアンロールします。
考えられる制限として、過度なアンロール、または非常に大きなループのアンロールにより、コードサイズが大きくなる可能性があります。-unroll[n] オプション (Linux*) または /Qunroll[n] オプション (Windows*) を使用した最適化方法の詳細は、『インテル(R) Pentium(R) 4 プロセッサーおよびインテル(R) Xeon(R) プロセッサー最適化リファレンス・マニュアル』 を参照してください。
-unroll[n] オプション (Linux) または /Qunroll[n] オプション (Windows) は、インテル(R) コンパイラーのループのアンロール処理方法を制御します。次の表に、このオプションの使用方法を要約します。
Windows |
Linux |
説明 |
---|---|---|
/Qunrolln シノニム: |
-unrolln |
ループのアンロール回数の上限を指定します。ループのアンロール回数を最大 4 回にするには、次のようにします。 icpc -unroll4 a.cpp (Linux) icl /Qunroll4 a.cpp (Windows)
|
/Qunroll |
-unroll |
n の値を省略すると、アンロールを実行するかどうかをコンパイラーが判断します。これはデフォルト設定です。コンパイラーは、デフォルトのヒューリスティックを使用するか、または n を定義します。 |
/Qunroll0 |
-unroll0 |
ループのアンロールを無効にします。ループのアンロールを無効にするには、n を 0 に指定します。次の例では、ループのアンロールが無効になります。 icpc -unroll0 a.cpp (Linux) icl /Qunroll0 a.cpp (Windows) |
上記のオプションの動作に関する詳細は、次のトピックを参照してください。
-unroll コンパイラー・オプション