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

自動並列化のプログラミング

自動並列化機能は、ワークシェア構造 (PARALLEL FOR ディレクティブ) などの OpenMP* のいくつかのコンセプトを取り入れています。 ここでは、自動並列化について説明します。

効率的な自動並列化の使用方法のガイドライン

ループは次の条件を満たす場合に並列化できます。

コンパイラーは、コンパイル時に定数ではないループ引数を使用して、parallel for ループで実行するメリットを検証するためにランタイムテストを生成します。

コーディング・ガイドライン

自動並列化の機能性と効率性を強化するコーディング・ガイドラインを次に示します。

自動並列化のデータフロー

自動並列化の処理では、コンパイラーは次のステップを実行します。

  1. データフローの解析: プログラムを通してデータのフローを計算します。

  2. ループの分類: 「自動並列化の使用」で示されるように、正確さと効率に基づいて並列化のループの候補を決定します。

  3. 依存性の解析: 各ループの入れ子構造で参照における依存性の解析を計算します。

  4. 高度な並列化: 依存性のグラフを解析し、並列で実行できるループを決定して、ランタイムの依存性を計算します。

  5. データのパーティショニング: SHAREDPRIVATE、および FIRSTPRIVATE のアクセスのタイプに基づいて、データ参照とパーティションを検査します。

  6. マルチスレッド・コードの生成: ループの引数を修正し、スレッドタスクごとに入口/出口を生成して、スレッド生成と同期化の並列ランタイムルーチンへの呼び出しを生成します。

OpenMP* を使用するオプションは、インテル製マイクロプロセッサーおよび互換マイクロプロセッサーの両方で利用可能ですが、両者では結果が異なります。 両者の結果が異なる可能性のある OpenMP* 構造および機能の主なリストは次のとおりです: ロック (内部的なものおよびユーザーが利用可能なもの)、SINGLE 構造、バリア (暗黙的および明示的)、並列ループ・スケジュール、リダクション、メモリーの割り当て、スレッド・アフィニティー、バインド。

関連情報