並列構造に関する注意事項の概要

多くの計算がループで実行されるアプリケーションについて、インテル® コンパイラーはそのようなループを識別し、マルチスレッド・バージョンのアプリケーションを自動的に生成することができます。この変換は、マルチコア・プロセッサー・プラットフォーム、ハイパースレッディング・テクノロジー (HT テクノロジー) 対応のマルチコア・プロセッサー・システム向けのアプリケーションを対象にしています。

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

コンパイラーは、ループ中のデータフローを解析して、安全かつ効率的に並列実行できるループを判断します。自動並列化を行うと、実行時間が短くなることがあります。この自動並列化は、次のような一般的な作業にかかる時間を短縮することができます。

Note icon

-openmp-parallel (Linux* および Mac OS* X) または /Qopenmp/Qparallel (Windows*) コンパイラー・オプションの両方が同じコマンドラインで指定されると、コンパイラーは OpenMP* 宣言子を含まない関数のみを並列化しようとします。

次のプログラムには、反復カウントの高いループが含まれています。

subroutine no_dep
  parameter (n=100000000)
  real a, c(n)
  do i = 1, n
    a = 2 * i - 1
    c(i) = sqrt(a)
  enddo
  print*, n, c(1), c(n)
end subroutine no_dep

コンパイラーのデータフロー解析では、ループに繰り返し間のデータ依存がないことを確認します。コンパイラーは、ランタイム時にスレッド間で、可能な限り反復を平等に分割するコードを生成します。

スレッドの数はデフォルトではプロセッサーの数ですが、OMP_NUM_THREADS 環境変数を使用して設定できます。指定されたループの並列速度の向上は、作業の量、スレッド間のロードバランス、スレッド作成および同期のオーバーヘッドなど、多くの要因に依存しますが、一般的にスレッドの数未満になります。プログラム全体では、速度の向上はシリアル部分に対する並列部分の比率に依存します。

コンパイルとリンクをそれぞれ別のビルドで行う場合、自動並列化を使用するときは、OpenMP* ランタイム・ライブラリーを必ずリンクしてください。この場合、インテル® コンパイラー・ドライバーを使用してリンクすると非常に簡単です。

関連情報


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

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