この記事は、The Parallel Universe Magazine 40 号に掲載されている「Book Review: The OpenMP Common Core – Making OpenMP Simple Again」の日本語参考訳です。
OpenMP* は、共有メモリー並列コンピューティング向けのアプリケーション・プログラミング・インターフェイス (API) を提供します。コンパイラー・ディレクティブ、ライブラリー・ルーチン、環境変数で構成されており、これらはすべて、開発者が並列実行を定義および制御するために使用できます。OpenMP* 仕様は、ハードウェア・アーキテクチャーおよびプログラミング言語のトレンドに対応するため、1997 年から進化を続けています。これは前向きな動きですが、OpenMP* の利用に興味を持っている開発者にとって、現在の機能は多種多様すぎます。Timothy G. Mattson、Yun (Helen) He、Alice Konigs 共著『The OpenMP Common Core』では、「必修科目」のアイデアを定義することにより、この問題に対処できるようにしています。
著者たちが定義した必修科目は、OpenMP* API のコンパクトなサブセットで、新しいユーザーが始めに知るべき情報として理想的です。本書で紹介されている必修科目の機能は OpenMP* を使用して多くのアプリケーションを並列化するには十分ですが、追加の機能が必要なユーザーのために、ほかの資料についての情報も提供されています。本書では、読者に C、C++、または Fortran の基本的なプログラミング・スキルがあることを前提としていますが、並列コンピューティングの知識は必要ありません。
本書は 3 部で構成されています。
- Setting the Stage (はじめに)
- The OpenMP Common Core (OpenMP* 必修科目)
- Beyond the Common Core (必修科目が終わったら)
Setting the Stage (はじめに)
第 2 部は 120 ページ以上からなり、本書の大部分を占めます。著者たちが OpenMP* 必修科目について議論して定義します。この OpenMP* API のサブセットを定義する概念と構成は非常に分かりやすく説明されています。アプローチは非常に実用的で、例を使用して機能を説明した後、機能を適用する方法を示しています。π の値を近似する数値積分アルゴリズムなど、いくつかの例は、省略することなく示されています。これらの例は、小さくても完全に機能し、シーケンシャル・プログラムを正しい OpenMP* プログラムに変換する方法を説明するのに非常に役立っています。多くの問題点は細部に含まれることから、著者たちは本書全体を通して潜在的な落とし穴を取り上げています。
OpenMP* データモデルは、初心者にとって習得が難しいものの 1 つです。これは主に、シーケンシャル・アプリケーションではデータモデルについて考える必要がないためですが、共有メモリー・プログラミングでは不可欠です。このトピックの内容は素晴らしいとしか言えません。このトピックを読めば、シングルスレッド・プログラムからマルチスレッド・プログラムに移行することの不安と混乱を取り除くことができるでしょう。経験豊富な OpenMP* 開発者にとっても、このセクションは役立つはずです。
本書がほかの書籍と異なる点はもう 1 つあります。多くの OpenMP* 書籍は、並列ループまでしか説明していません。並列アルゴリズムのいくつかのクラスでは、異なる形式の (非同期で動的な) 並列処理が必要です。OpenMP* では、このサポートはタスクの概念を通じて提供されます。本書では、複数のコード例を使用して、OpenMP* タスクを詳細に説明しています。驚いたことに、タスクを含むデータ環境についても非常に分かりやすく説明されています。タスクは簡単に理解できるトピックではありませんが、著者たちは非常にうまく説明しています。
すべての OpenMP* 開発者は、メモリーモデルを正しく理解している必要があります。これは OpenMP* に固有のもので、仕様のかなり複雑な部分です。このトピックを説明している章は、本書の中でも特に優れた部分と言えます。また、共有メモリー並列プログラミングを初めて使用するユーザーにとってもう 1 つの難解なトピックである、メモリーの一貫性についても分かりやすく紹介しています。これらのトピックについて本書より優れた説明を読んだことはありません。
第 2 部は、OpenMP* 必修科目を要約しておしまいです。初めて読んだときは内容が少し冗長ではないかと疑問に思いましたが、本書を通して読み終えるとその疑問は解消しました。読者が以前の章を読み終えていると仮定すると、この第 2 部は優れたリファレンスになるでしょう。リファレンスとして利用することにより、以前の章で取り上げた詳細を調べたり、詳細を見つけたりすることが簡単になります。この第 2 部は、必要な情報がすべて含まれ、情報が結び付くところです。また、著者たちは、ここで特定の機能の使用について微妙な違いを紹介しています。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。