Help us understand the problem. What is going on with this article?

【調べもの】fortranをめぐる並列計算環境とCoarray

More than 1 year has passed since last update.

これまで:プロセス並列とスレッド並列

これまで、fortranでは主に「openMP」と「MPI」という二つの並列計算ライブラリが使われてきました。

openMPはスレッド並列方式で、メモリを共有したスレッドという単位で並列化します。共有メモリなので通信が不要であるというメリットがある一方、並列数に上限があります。

MPIはプロセス並列方式で、メモリが固有のプロセスという単位で並列化します。複数のノード上にプロセスを割り当てて硬度に並列化することができる一方、メモリが分かれているために通信が必要となり、そこに工夫の余地が生まれます。

また、両者ともに多かれ少なかれコードに並列化するための工夫が必要であるというデメリットがあります。特にMPIでは顕著で、通信のために大量の固有のサブルーチンを覚えなければならないという苦労が必要でした。

Coarrayとは

Coarrayはgo言語のgoroutineと同じように「プログラマが特に意識することなく並列計算ができるようにする」ことを目標として制定された仕様です。fortran2008から導入された、最新の機能です。

Coarrayはイメージ制御とセットで導入されました。イメージとは、プロセスやスレッドを包括した、一般的な処理の単位です。Coarrayはそのイメージごとのデータの扱いを、より簡単にできるようにしたものです。

ソースコードはたくさん公開されているので、ここでは割愛します。

Coarrayを使うには

gfortranでCoarrayを使う場合、外部ライブラリが必要になります。1 ライブラリの実装はいくつかあり、MPIでの実装がおそらく現実的かなあと思います。つまり、結局のところ「CoarrayはMPIを簡単に使うためのもの」みたいです。

まずコンパイル時に-fcoarray=libオプションが必要です。コンパイルするために設定しなければならない環境変数はopenMPIとMPICHの場合で異なっているようです。

また、中身はMPIコードなので、実行時はmpiexecで実行します。

参考サイト

Coarrays via GNU Fortran's Coarray Communication Library
https://gcc.gnu.org/wiki/CoarrayLib

めっちゃ新しもの好き Fortran 2008
http://jjoo.sakura.ne.jp/tips/fortran2008/

Co-array Fortran (wikipedia)
https://ja.wikipedia.org/wiki/Co-array_Fortran


  1. single image、すなわち1並列の場合は内蔵機能でできますが、あまり意味がありません。おそらくCoarrayで書かれたコードをそのままコンパイルするための機能だと思われます。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした