このページでは OpenMP に関する記事や参考資料へのリンクをまとめています。
概要
OpenMP* サポートの概要
インテル® コンパイラーは、OpenMP* 仕様の機能をサポートしています。OpenMP* 言語仕様に関する詳細は、「OpenMP* ウェブサイト (openmp.org) (英語) から「Specifications」タブをクリックしてそれぞれの仕様の「Reference Guide」または「Specifications」をご覧ください。このページの OpenMP* 言語特性の記述は、仕様書に定義される用語を用いています。
OpenMP* API は、次の主要機能を備えたシンメトリックまたはヘテロジニアス・マルチプロセシングを提供します。
|
![]() |
インテル® コンパイラーがサポートする OpenMP* の仕様
仕様のバージョン | インテル® コンパイラーのバージョン |
---|---|
OpenMP* 5.0 | 次期バージョンでサポートの予定 |
OpenMP* 5.0 TR4 | インテル® コンパイラー V18.0、インテル® コンパイラー V19.0 |
OpenMP* 4.5 | インテル® コンパイラー V17.0 |
OpenMP* 4.0 | インテル® コンパイラー V14.0 |
OpenMP* 3.1 | インテル® コンパイラー V12.1 |
OpenMP* 2.5 | インテル® コンパイラー V11.0 |
OpenMP* 2.0 | インテル® コンパイラー V9.0 |
既存のソフトウェアに簡単にスレッドを追加するため、ソースコードに配置された OpenMP* プラグマに基づいて、コンパイラーがマルチスレッド・コードを生成する変換を行います。インテル® コンパイラーは、並列プログラムをコンパイルし業界標準である OpenMP* ディレクティブのほとんどをサポートします。
コンパイラーは、ランタイム・ライブラリーと環境変数を含め、OpenMP* 仕様に加えインテル固有の拡張機能を提供します。インテル固有拡張は、インテル・コンパイラーのみでサポートされます。コンパイラーのオプションは、OpenMP* オプション・クイック・リファレンスにまとめられています。
OpenMP* による並列処理
OpenMP* API を使用してコンパイルするにはソースコードにプラグマを追加します。インテル・コンパイラーは、追加されたプラグマを解析し、並列領域や構文を実行するスレッドによって実装されるマルチスレッド・バージョンを生成します。OpenMP* 4.0 以降では、omp simd による明示的なベクトル化が可能になりました。
他のコンパイラーを利用する
OpenMP 仕様は複数の実装における相互運用性を定義していないため、他のコンパイラーでサポートされる OpenMP 実装とインテル・コンパイラーの実装には相互運用性が無いことがあります。そのため、特定のコンパイラーでアプリケーション全体をコンパイルおよびビルドを行っている場合、同じソースを異なるコンパイラーでコンパイルしてリンクしても OpenMP のソース互換性の違いから、並列実行した結果が異なる恐れがあることに留意してください。
インテル・コンパイラーは 2 つの OpenMP* ライブラリーを提供します。詳しくは、コンパイラーのドキュメント「OpenMP* Source Compatibility and Interoperability with Other Compilers」の記述をご覧ください。
利用する
OpenMP は、以下のインテルソフトウェア開発製品でサポートされます:
- インテル® C++ コンパイラー
- インテル® Fortran コンパイラー
- インテル® Parallel Studio XE
- インテル® マス・カーネル・ライブラリー(インテル® MKL)
- インテル® VTune™ プロファイラー
これらの製品の無料評価版はこちらで入手できます。
OpenMP.org のウェブサイトでは、OpenMPをサポートする他のコンパイラーなど多くの情報が提供されています。
学習する
技術記事
入門記事
- OpenMP* でベクトル化された並列ループを簡単に作成する
- OpenMP* を使用中に変数アクセスでスレッドがクラッシュしないようにする
- 効率良い並列化
- OpenMP* 入門
- OpenMP* を使用した並列化
- OpenMP* を使用して既存のシリアルコードで並列処理の可能性を見つけよう
- マルチスレッド開発ガイド: 1.6 スレッドの代替としてのタスクの使用
- 並列プログラミングのエキスパートのようになるには – パート 4: 並列ソフトウェアの作成
- Parallel Universe マガジン
中上級者向け記事
- LLVM/Clang で OpenMP* 4.0 機能を試してみる
- OpenMP* 実行環境関数
- OpenMP* 4.0における SIMD およびアフィニティー機能の導入(2014年1月)
- C++ 開発者が陥りやすい OpenMP* の 32 の罠
- 高度な OpenMP* プログラミング
- OpenMP* 関連のヒント
- OpenMP* ループ・スケジュール
- OpenMP* スレッド・アフィニティーの制御
- OpenMP* を使用したその他のワークシェア
- インテル® IPP における OpenMP* サポートの変更
- マルチスレッド・アプリケーションからインテル® MKL ルーチンを呼び出す場合の推奨設定
- インテル® MKL 10.3 で追加された新機能
- マルチコア・プロセッサーにおける 3 次元有限差分法の実装
- インテル® C++/Fortran コンパイラーによる OpenMP* 3.1 仕様のサポート
- OMP_PROC_BIND の振る舞いがインテル製品以外のプロセッサーとの互換性をサポートしました
- OpenMP*、インテル® TBB、インテル® Cilk™ Plus におけるマスタースレッドとワーカースレッドの浮動小数点設定の違い
- HPL 向けアプリケーション・ノート
- OpenMP* のサポート・ライブラリー
- OMP Abort エラーが発生した場合の対処方法
- インテル® Parallel Debugger Extension
インテル® Xeon Phi™ 関連の記事
MPIとの併用に関する記事
- ハイブリッド・アプリケーション: インテル® MPI ライブラリーと OpenMP*
- MPI と OpenMP* の併用によりハードウェアを活用する
- MPI/OpenMP* のハイブリッド・プログラミングを始めよう
- インテル® Cluster Studio XE 2012 を利用した MPI/OpenMP* ハイブリッド・アプリケーション: ノードレベルまで最適化
Fortran 向け記事
- インテル® Fortran Studio XE によるマンデルブロー描画プログラムの高速化
- Fortran アプリケーションにおけるインテル® Inspector XE の使用 – パート 1 メモリー解析
- Fortran アプリケーションにおけるインテル® Inspector XE の使用 – パート 2 スレッド解析
- Fortran アプリケーションにおけるインテル® Inspector XE の使用 – パート 3 スタティック・セキュリティー解析
- インテル® Parallel Studio XE を使用した Linux* 環境での Fortran プログラムの正当性解析
OpenMP パフォーマンス解析
サポート
OpenMP* に関連するリンク集
- OpenMP.org(英語) – OpenMP の技術仕様、ツール、ニュース、サンプルコードなど、OpenMP を利用してコーディングを始めるためのすべてが入手できます。
- 製品ドキュメント – インテル® コンパイラーの製品ドキュメント。
- iSUS 並列化フォーラム – iSUS に開設されているユーザー・フォーラムです。
- iSUS で関連する記事を検索 – iSUS で掲載されている OpenMP関連記事を検索します
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。