OpenMP* を使用した並列化

同カテゴリーの次の記事

OpenMP* スレッド・アフィニティーの制御

この記事は、インテル® ソフトウェア・サイトに掲載されている「Parallelization Using OpenMP*」の日本語参考訳です。


ここでは、インテル® Composer XE Linux* 版における OpenMP* 3.1 のサポートについて説明します。

はじめに

インテル® Composer XE 2013 Linux* 版は、OpenMP* バージョン 3.1 の API 仕様をサポートしています。OpenMP* は、アプリケーションの並列化に利用できる多くの選択肢の 1 つであり、 OpenMP* は、共有メモリー型マルチプロセッサー向けのスレッドによる並列処理で使用されます。OpenMP* の完全な言語仕様については、OpenMP* Web サイトの OpenMP* Application Program Interface バージョン 3.1 仕様 (http://www.openmp.org/ で「OpenMP Specifications」をクリック) を参照してください。ここでは、OpenMP* 仕様で定義されている用語に沿って OpenMP* の言語特性を説明します。

OpenMP* は、対称型マルチプロセッシング (SMP) 向けに次の機能を提供します。

  • ループ反復空間のパーティショニング、データ共有、スレッド作成とスケジューリング、および同期における低レベルの処理を抽象化し、ユーザーの負担を軽減します。
  • インテル® ハイパースレッディング・テクノロジー (インテル® HT テクノロジー) 対応プロセッサーを含む、インテル® アーキテクチャーで、サポートされるすべての共有メモリー型マルチプロセッサー・システムおよびマルチコア・プロセッサー・システムから優れたパフォーマンスを引き出します。

コンパイラーは、プログラマーが記述した OpenMP* 指示句に従ってコード変換を行い、マルチスレッド・コードを生成して、既存のソフトウェアへスレッドをより簡単に実装します。インテル® コンパイラーは、業界標準の OpenMP* 指示句のすべてに対応し、OpenMP* 指示句を含む並列実行プログラムをコンパイルします。

インテル® コンパイラーでの OpenMP* の使用

ンテル® コンパイラーには、OpenMP* サンプル、OpenMP* の使用方法、言語およびライブラリー・ランタイムの詳細に関するドキュメントが含まれています。ただし、これらのドキュメントには、OpenMP* の基本的な情報は含まれていません。OpenMP* の基本情報は、OpenMP* Web サイト (http://www.openmp.org) の解説や Web ベースのチュートリアルを参照してください (iSUS のオンライン・トレーニングにも OpenMP* のコースがあります)。C++ および Fortran コンパイラーには、サンプルコードも含まれています。Samples フォルダーはコンパイラーをインストールしたフォルダー以下にあります。デフォルトのパス (Linux*) は、/opt/intel/composerxe/Samples/en_US/[C++ | Fortran] です (日本語版では Samples 以下に ja_JP というフォルダーがありますが、すべてのファイルが含まれていない場合があるため、en_US フォルダーのサンプルを参照してください)。

インテル® コンパイラーの『ユーザー・リファレンス・ガイド』には OpenMP* の使用に関するドキュメントも含まれています。以下の『入門』ページには各ドキュメントへのリンクが含まれています。

コンパイラー (Fortran または C++) の『入門』ページ:

  • Fortran: <ドキュメントへのパス>/get_started_lf.htm
  • C/C++: <ドキュメントへのパス>/get_started_lc.htm

Linux* 版のデフォルトの <ドキュメントへのパス> は、/opt/intel/composerxe/Documentation/ja_JP ディレクトリーです。

上記のディレクトリーにアクセスできない場合、オンラインで参照することもできます。

オンライン・ドキュメント:

  • インテル(R) C++ Composer XE 2013 Linux* 版ユーザー・リファレンス・ガイド (http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-lin/index.htm)
    • インテル(R) C++ Composer XE 2013 Linux* 版のすべてのドキュメント・リスト (http://software.intel.com/en-us/articles/intel-c-composer-xe-documentation/#lin)
  • インテル(R) Fortran Composer XE 2013 Linux* 版ユーザー・リファレンス・ガイド (http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/fortran-lin/index.htm)
    • インテル(R) Fortran Composer XE 2013 Linux* 版のすべてのドキュメント・リスト (http://software.intel.com/en-us/articles/intel-fortran-composer-xe-documentation/#lin)

スクロールして、『ユーザー・リファレンス・ガイド』を見つけたら ドキュメントを開きます。目次から、「主な機能」 > 「OpenMP* サポート」を開いてください。このトピックは、インテル® コンパイラーにおける OpenMP* の使用について説明しています。「OpenMP* のサポート」 – 「OpenMP* ライブラリーのサポート」 – 「スレッド・アフィニティー・インターフェイス (Linux* および Windows*)」では、 KMP_AFFINITY を使用したスレッド・アフィニティーの制御について説明します。インテル® Xeon Phi™ コプロセッサーのパフォーマンスとの関係については、「OpenMP* スレッド・アフィニティーの制御」を参照してください。

『ユーザー・リファレンス・ガイド』は、インテル® Xeon® プロセッサーおよびインテル® Xeon Phi™ コプロセッサーで実行するアプリケーションに関するジェネリックな情報を提供します。インテル® Xeon Phi™ コプロセッサーでアプリケーションのパフォーマンスを引き出すための情報については、「効率良い並列化」からリンクされる「OpenMP* スレッド・アフィニティーの制御」、「OpenMP* ループ・スケジュール」、「OpenMP* 関連のヒント」を参照してください。

まとめ

インテル® Composer XE 2013 Linux* 版は、OpenMP* バージョン 3.1 の API 仕様をサポートしています。インテル® コンパイラーにおける OpenMP* アプリケーションの使用に関する情報は、上記にリストされている製品ドキュメントに含まれています。OpenMP* に関する一般的な情報 (英語) は、オンライン (http://www.openmp.org) で入手できます。-openmp コンパイラー・オプションと OpenMP* 関連の環境変数についての情報を調べることを推奨します。次のステップに進む前に、ホスト・プラットフォームでインテル® コンパイラーを使用して、Samples のような OpenMP* アプリケーションをビルドおよび実行できることを確認してください。スレッド数の制御には、OMP_NUM_THREADS を使用します。また、スレッド・アフィニティーの概念と KMP_AFFINITY 環境変数の使用方法も必ず確認してください。

次のステップ

この記事は、「Programming and Compiling for Intel® Many Integrated Core Architecture」(英語) の一部「Parallelization Using OpenMP*」の翻訳です。インテル® Xeon Phi™ コプロセッサー上にアプリケーションを移植し、チューニングを行うには、本ガイドの各リンクのトピックを参照してください。アプリケーションのパフォーマンスを最大限に引き出すために必要なステップを紹介しています。

「効率良い並列化」に戻る

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

関連記事