インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

自動並列化の使用

自動並列化を有効にするには、[Q]parallel オプションを使用します。このオプションは、安全に並列実行できる並列ループを検出して、これらのループのマルチスレッド・コードを自動的に生成します。

このオプションを使用して、並列化を有効にするには、KMP_STACKSIZE 環境変数に十分なサイズを設定する必要があります。

このオプションを使用すると、互換マイクロプロセッサーおよびインテル製マイクロプロセッサーの両方で並列化が有効になります。実行ファイルは、互換マイクロプロセッサーよりもインテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる可能性があります。また、並列化は、/arch (Windows*)、-m (Linux* および macOS*)、[Q]x などの特定のオプションによる影響を受けます。

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

Linux* 用の自動並列化コマンド

ifort -c -parallel myprog.f

Windows* 用の自動並列化コマンド

ifort -c /Qparallel myprog.f

macOS* 用の自動並列化コマンド

ifort -c -parallel myprog.f

自動並列化では、2 つのディレクティブ !DIR$ PARALLEL!DIR$ NOPARALLEL が使用されます。

自動並列化コンパイラー・ディレクティブは次のとおりです。

構文

!DIR$ <directive>

自動並列化ディレクティブは感嘆符 (!) で始まるため、[Q]parallel オプションを省略した場合、ディレクティブはコメントの形式になります。

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

!DIR$ NOPARALLEL ディレクティブは自動並列化を無効にしています。

例えば、次のコードで NOPARALLEL ディレクティブは自動並列化を無効にします。

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

関連情報