OpenMP*

このページでは OpenMP に関する記事や参考資料へのリンクをまとめています。

概要

OpenMP* サポートの概要

インテル® コンパイラーは、OpenMP* 仕様の機能をサポートしています。OpenMP* 言語仕様に関する詳細は、「OpenMP* ウェブサイト (openmp.org) (英語) から「Specifications」タブをクリックしてそれぞれの仕様の「Reference Guide」または「Specifications」をご覧ください。このページの OpenMP* 言語特性の記述は、仕様書に定義される用語を用いています。

OpenMP* API は、次の主要機能を備えたシンメトリックまたはヘテロジニアス・マルチプロセシングを提供します。
  • ループ反復空間の分割、データの共有、スレッドの生成とスケジュール、ベクトル化または同期など低レベルの細かい実装からユーザーを解放します。
  • インテル® ハイパースレッディング・テクノロジー (インテル® HT テクノロジー) を含むすべてのインテル® アーキテクチャー・プロセッサー上で、共有メモリー型マルチプロセッサーとマルチコア・プロセッサーによるパフォーマンスの利点を提供します。
  • インテル® Xeon Phi™ プロセッサー/コプロセッサーのサポートを提供します。

インテル® コンパイラーがサポートする OpenMP* の仕様

既存のソフトウェアに簡単にスレッドを追加するため、ソースコードに配置された 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* に関連するリンク集

  • OpenMP.org(英語) – OpenMP の技術仕様、ツール、ニュース、サンプルコードなど、OpenMP を利用してコーディングを始めるためのすべてが入手できます。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。