by
Anonymous Coward
on 2019年07月06日 20時38分
(#3647397)
coarray以前のfortranでは分散配列は
real a(N) block a(:)
のように宣言していた この場合は配列aはプロセッサ(n個)にわたる分散配列で、それぞれのプロセッサはN/n個ずつ要素を持っている アクセスするときは普通の配列のように t = t + a(i) と書き、添え字に応じて他プロセッサからデータを取ってくるコードにコンパイルされる これは抽象レベルは高いが隔靴掻痒でしかも性能が低かった
by
Anonymous Coward
on 2019年07月06日 21時06分
(#3647401)
coarrayでは配列は
real a(N/n) と、各プロセッサが自分の持ち分だけ宣言するようにする 配列のアクセスは t = t + a(i)[j] と書き、j番目のプロセッサのi番目のaの要素を指定できる これも必要に応じてコンパイラが通信や同期コードを挿入する こちらは抽象度は低いが、書きやすさはさほど変わらず、どういうコードに落ちるかが明白で、単純な最適化がよく利く んで、これは最初はF--と言われていた
Coarray (スコア:0)
が残ればFortranは死んでもいいかなと思える
Re:Coarray (スコア:1)
coarray以前のfortranでは分散配列は
real a(N)
block a(:)
のように宣言していた
この場合は配列aはプロセッサ(n個)にわたる分散配列で、それぞれのプロセッサはN/n個ずつ要素を持っている
アクセスするときは普通の配列のように
t = t + a(i)
と書き、添え字に応じて他プロセッサからデータを取ってくるコードにコンパイルされる
これは抽象レベルは高いが隔靴掻痒でしかも性能が低かった
Re:Coarray (スコア:2, おもしろおかしい)
:) を顔文字に自動変換するチャットツールはなくなってほしい...
Re:Coarray (スコア:1)
coarrayでは配列は
real a(N/n)
と、各プロセッサが自分の持ち分だけ宣言するようにする
配列のアクセスは
t = t + a(i)[j]
と書き、j番目のプロセッサのi番目のaの要素を指定できる
これも必要に応じてコンパイラが通信や同期コードを挿入する
こちらは抽象度は低いが、書きやすさはさほど変わらず、どういうコードに落ちるかが明白で、単純な最適化がよく利く
んで、これは最初はF--と言われていた
Re:Coarray (スコア:2, 興味深い)
モデルがMPIと同じなので、MPIの人はcoarrayはすぐに使いこなせる
自明な通信や同期をいちいち手で書く必要がない
MPIとの混在も容易だ
Fortranの歴史は最適化の歴史だったが、ここにきて逆行したのが面白い
C++でcoarrayを実現する試みはあるが、まだ研究レベルのようだし、記述も冗長だ
coarray fortranは簡潔で筋の良さを感じるが、どれくらい競争力あるのかなあ