Co-array Fortran

提供: miniwiki
2018/8/19/ (日) 20:02時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索
Coarray Fortran
パラダイム 並列メッセージパッシング手続き型構造化命令型オブジェクト指向
設計者 Robert Numrich and John Reid
開発者 PL22.3 Fortran Committee
最新リリース Fortran 2008 (ISO/IEC 1539-1:2010)
型付け 強い静的型付け
主な処理系 Cray, GFortran, G95
影響を受けた言語 Fortran
プラットフォーム クロスプラットフォーム
ウェブサイト Co-array Fortran web site
テンプレートを表示

Co-array FortranFortran 95/2003を並列化を目的として拡張した言語である。以前はF--としても知られ、Robert NumrichJohn Reidによって開発された。

Co-array Fortranで記述されたプログラムではすべてのスレッドが非同期的に実行されるように扱われる。それぞれのスレッドはイメージと呼ばれる自身のデータオブジェクトを持つ。また、Fortran 95での配列の構文が角括弧と添字を用いてイメージを指定できるように拡張されている。

ISOは2005年5月に次のFortranの標準規格(Fortran 2008)に対してCo-array Fortranを採用することを決定した。

最初にLinuxアーキテクチャにおいてFortran 2008のCo-array Fortranに対応したオープンソースコンパイラはG95である。他にもCrayなどいくつかの商用コンパイラは以前からCo-array Fortranをサポートしている。

program Hello_World
  implicit none
  integer :: i  ! Local variable
  character(len=20) :: name[*] ! scalar coarray
  ! 注意: "name[<index>]" はリモートのイメージ上の変数への
  ! アクセスであるのに対し "name" はローカル変数である

  ! イメージ1上のユーザーから名前の入力を受ける
  if (this_image() == 1) then
    write(*,'(a)',advance='no') 'Enter your name: '
    read(*,'(a)') name

    ! 他のイメージに名前の内容を分配する。
    do i = 2, num_images()
      name[i] = name
    end do
  end if

  sync all ! 確実に同期をとるために[[バリア]]を設ける

  ! すべてノードで名前を表示する
  write(*,'(3a,i0)') 'Hello ',trim(name),' from image ', this_image()
end program Hello_world

関連項目

外部リンク