自動最適化

自動パラレライザーを有効にするには、-parallel (Linux* および Mac OS* X) または /Qparallel (Windows*) オプションを使用します。このオプションは、安全に並列実行できる並列ループを検出して、これらのループのマルチスレッド・コードを自動的に生成します。

Note icon

このオプションを使用して、並列化を有効にするには、KMP_STACKSIZE 環境変数に十分なサイズを設定する必要があります。-parallel (Linux*) オプションまたは /Qparallel (Windows*) オプションを使用すると、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーにおいて並列化が有効になります。実行ファイルでは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、並列化は、/arch/Qx (Windows*) または -m-x (Linux* および Mac OS* X) などの特定のオプションによる影響を受けます。

自動並列化を使用するコマンド例は、次のとおりです。

オペレーティング・システム

説明

Linux* および Mac OS* X

ifort -c -parallel myprog.f

Windows

ifort -c /Qparallel myprog.f

自動並列化では、2 つの特定の宣言子 !DEC$ PARALLEL!DEC$ NOPARALLEL が使用されます。

自動並列化コンパイラー宣言子は次のとおりです。

構文

<prefix> <directive>

<prefix> は次のとおりです。

<prefix> の後には、宣言子がきます。次に例を示します。

構文

!DEC$ PARALLEL

自動並列化宣言子は感嘆符で始まるため、-parallel (Linux*) または /Qparallel (Windows*) オプションを省略した場合、宣言子はコメントの形式になります。

!DEC$ PARALLEL 宣言子 は、すぐ後のループで存在していると想定され、正常な自動並列化を妨げる依存を無視するようにコンパイラーに指示します。しかし、依存性が証明されると無視されません。さらに、PARALLEL [ALWAYS] は、ループの並列化がパフォーマンスを向上させる可能性を推定するコンパイラー・ヒューリスティックを無効にします。 これにより、コンパイラーによって、並列化がパフォーマンスを向上しないと推定された場合でも、ループが並列化されます。 !DEC$ PARALLEL [ALWAYS [ASSERT]] など、ASSERT キーワードが追加されると、コンパイラーは、コンパイラーの解析とコストモデルはループが並列化できないことを示している旨のエラーレベルのアサーション・メッセージを生成します。

!DEC$ NOPARALLEL 宣言子は自動並列化を無効にします。

例えば、次のコードでは NOPARALLEL 宣言子は自動並列化を無効にしています。

program main
parameter (n=100
integer x(n),a(n) 
!DEC$ NOPARALLEL
do i=1,n
  x(i) = i
enddo 
!DEC$ PARALLEL
do i=1,n
  a( x(i) ) = i
enddo
end

このヘルプトピックについてのフィードバックを送信

© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。