世界のスーパーコンピュータとそれを動かす人々


11月 4, 2014

OpenMPでの並列プログラミング

HPCwire Japan

Tiffany Trader

HPCプログラマのツールボックスの中で最も重要なツールのひとつは、1997年に発表された共有メモリ型並列処理を記述するための規格、OpenMPである。現在のリリースは、バージョン4.0であり、昨年11月に登場した。

最近のビデオで、OracleのOpenMP委員会の代表、Nawal Coptyは、幾つかのツールの機能と共通の落とし穴を探っている。

Coptyは、OpenMPは並列プログラムを記述するための方法としてシンプルであると説明し、「C、C++またはFortranでプログラムと開始し、そしてその後コードのどの部分を並列化したいかをコンパイラに指定するためにコード内へディレクティブを挿入します。」 と言う。

Coptyによると、POSIXスレッドを使用するより学び易く、使いやすいと言ったような幾つかの利点がある。アプリケーションを書き直す必要はなく、並列処理が少しずつ追加されるインクリメンタル並列化と呼ばれる手法で、ただディレクティブを挿入するだけである。 並列領域、並列ループやタスクなど、OpenMPによってサポートされている何種類かの並列処理がある。

OpenMPの最新バージョンは、いくつかの新機能が含まれているとCoptyは強調する。そのひとつは、領域取り消しと呼ばれている。これは、もし特定の条件が発生した場合、プログラマが領域の実行をクリーンに終了したり、中止できるようにするための機構である。もうひとつの特徴は、タスクの依存関係を伴うもので、プログラマが依存性のある動作を指定することができる。もうひとつの重要な特徴は、スレッドアフィニティである。これにより、プログラマは、アプリケーションが特定のプロセッサ上で動作し、アプリケーションの実行中に動き回ってはならないことを指定できる。

Coptyは、誤った結果やハングアップ、クラッシュを引き起こす可能性のあるデータ競合やデータロックを含むいくつかの一般的な落とし穴を認識しておくようにユーザへ最後の注意を促す。 Oracle Solarisは、これらの条件を特定することができまるスレッドアナライザと呼ばれるツールを持っている。

OpenMPのの歴史に興味のある人のために、Intelは並列コンピューティングフォーラムの最新号で約20年間のOpenMPのタイムラインを披露した。