Fortran/並列処理
並列処理は、Fortran 2008標準に含まれています。並列機能を使用するには、Fortranプログラムを並列処理が有効になっている状態でコンパイルする必要があります。例えば、Intel ifortコンパイラでは、-coarray
フラグが使用されます。
イメージ 編集
Fortranは、並列処理のために区分化大域アドレス空間(Partitioned Global Address Space; PGAS)モデルを使用しています。各プロセッサに対して、プログラムは独自のメモリパーティションを持つ別個の重複した「イメージ」として実行されます。以下のプログラムを考えてみてください:
program hello implicit none write (*,*) 'Hello from ', this_image(), 'of', num_images() end program hello
組込み関数 this_image
は、実行中のイメージの番号を返し、組込み関数 num_images
はプログラムの全イメージ数を返します。プログラムが4つのプロセッサでコンパイルおよび実行された場合、出力は次のようになるかもしれません:
Hello from image 1 of 4 Hello from image 4 of 4 Hello from image 2 of 4 Hello from image 3 of 4
イメージは非同期に実行されるため、出力が1、2、3、4の順番で表示されるとは限りません。
共配列 編集
共配列(Coarray)は、イメージ間で配列データを通信する方法です。共配列は通常の配列と同じように機能しますが、各イメージに対して追加のコディメンションがあります。コディメンションは角かっこ []
を使用して宣言およびインデックス化することができます。例えば、サイズが10でコディメンションのサイズが4のランク1の共配列を宣言するには:
real :: coarr(10)[4] ! もしくは、同じことを行うために宣言属性を使用することもできます real, dimension (10), codimension [4] :: another_coarr
スカラ変数も共配列にすることができます:
integer :: scalar['*']
ここで、 は利用可能なプロセッサの最大数を示します。コディメンションには通常の次元と同様に複数の軸があることができますが、コディメンションのランクは15が上限です。イメージ間でデータを転送するのはコディメンションのインデックス化と同じくらい簡単です。
! すべてのイメージを1に設定 coarr = 1 ! インデックス化 another_coarr(3)[4] = coarr(3)[3]
訳者から解説 |
共配列(Coarray)は、Fortranの並列処理機能を提供するための概念の一部です。これはFortran 2008標準で導入され、プログラムを複数のプロセッサまたはイメージに分割し、それらのイメージ間でデータを共有するための仕組みを提供します。共配列は、プログラムをイメージと呼ばれる独立した実行単位に分割し、それらのイメージが相互に通信することで、並列処理を実現します。
主な特徴や用語について以下に説明します:
共配列を使用することで、Fortranプログラムは異なるイメージで同時に実行され、イメージ間でデータを簡単に共有できます。これにより、並列処理の構築や高性能計算の実現が容易になります。 |