-unroll[n] オプションは、次のように使用します。
-unrolln は、ループのアンロール回数の上限を指定します。次の例では、最大 4 回ループをアンロールします。
ifort -unroll4 a.f
ループのアンロールを無効にするには、n を 0 に指定します。IA-32 システムでは、0 を指定することにより、キャッシュ・ライン分割問題を解決するために、必要なアンロールを除いてベクトライザのアンローラを無効にします。次の例では、ループのアンロールが無効になります。
ifort -unroll0 a.f
-unroll (n を省略) は、アンロールを実行するかどうかをコンパイラが判断します。これはデフォルト設定です。コンパイラは、デフォルトのヒューリスティックを使用するか、または n を定義します。
-unroll0 (n = 0) は、アンローラが無効になります。
Itanium® コンパイラは、現在、(n = 0) のみを使用します。 他の値は NOP です。
ループのアンロールの利点は、次のとおりです:
アンロールにより、分岐およびいくらかのコードが減ります。
変数を有効に保持するのに十分な空きレジスタがある場合は、アンロールにより、積極的にループをスケジューリング (またはパイプライン化) して、遅延を隠せます。
反復回数が予測可能で、ループ内に条件付き分岐がない場合、Pentium® 4 プロセッサおよびインテル® Xeon™ プロセッサは、16 以下の反復を持つ内部ループの終了分岐を正しく予測できます。したがって、ループ本体のサイズが大きすぎず、反復の予測回数がわかる場合、
- Pentium 4 プロセッサまたはインテル Xeon プロセッサの内部ループを、最大 16 の反復回数までアンロールします。
- Pentium III プロセッサまたは Pentium II プロセッサの内部ループを、最大 4 の反復回数までアンロールします。
考えられる欠点は、過度なアンロール、または非常に大きなループのアンロールにより、コードサイズが大きくなる場合あることです。
-unroll[n] での最適化方法の詳細は、『インテル® Pentium® 4 プロセッサおよびインテル® Xeon™ プロセッサ最適化リファレンス・マニュアル』を参照してください。