2

DISTRIBUTEHigh Performance Fortran(HPF)では、ディレクティブを使用して、並列計算に関係する配列の分布を指定できました。たとえば、次の最小限のサブルーチンは、2つの配列を並列に合計します。

subroutine mysum(x,y,z)
  integer, intent(in)  :: y(10000), z(10000)
  integer, intent(out) :: x(10000), 
  !HPF$ DISTRIBUTE x(BLOCK), y(BLOCK), z(BLOCK)
  x = y + z
end subroutine mysum

私の質問は、DISTRIBUTEディレクティブは必要ですか?私は実際にはこれがほとんど興味がないことを知っていますが、装飾されていない、ディレクティブのないFortranプログラムも有効なHPFプログラムである可能性があるかどうかについて興味がありますか?

4

1 に答える 1

2

DISTRIBUTEステートメントが必要だとは思わないので、使用したことはありません。

該当する場合は、DOループの代わりにFORALLステートメントを使用することで、これを暗黙的に実現できます。元々、DOループは配列要素に対する操作の明示的な順序を提供しますが、FORALLは、プロセッサが実行時に最適な順序を決定できるようにします。最近のコンパイラーは可能な場合にDOループを最適化/ベクトル化/並列化できるため、これが最近では大きな違いになるとは思いません。他のコンパイラーについてははっきりとはわかりませんが、インテルFortranコンパイラーを使用して、DISTRIBUTEを使用せずに2つおよび4つのプロセッサーでプログラムを並行してコンパイルおよび実行したことを覚えています。

ただし、プロセッサアーキテクチャとコンパイラによっては、使用しているものを試して、最適な結果または効率が得られるものを確認することをお勧めします。

于 2011-07-25T14:24:36.297 に答える