を期待するサブルーチンに配列を渡す私は1次元ワーク配列2次元アレイ異なる形状
pure subroutine f(work, dim1, dim2)
real(8), intent(out) :: work(dim1, dim2)
integer, intent(in) :: dim1, dim2
...
で動作サブルーチンに渡される
real(8), allocatable :: work(:)
を有します配列を渡す次の方法の違いは何ですか?
call f(work, dim1, dim2)
call f(work(1), dim1, dim2)
最初の配列要素へのポインタを渡しただけであるか、どちらかの呼び出しで余分なオーバーヘッドがありますか?現代のFortranでは、次元を明示的に渡すことなく形状を変更する必要があるが、パフォーマンス・ヒットはせずに配列を渡す方がよりエレガントな方法がありますか?
私は古いFortranのように見えますが、親サブルーチンで2次元配列を宣言し、配列セクションwork(:dim1,:dim2)
をf
に渡すよりも速く見つけました。
ここでは2つの全く異なる質問があります。 [work]と 'work(1)' .asの引数の違いは何ですか? [2]](http://stackoverflow.com/q/24472907)どのように別の形状としてダミーに関連付けられている1つの形状の配列を持っている? (:DIM1、:DIM2) 'work'はあなたではなくアレイ部'仕事よりも、全体の配列として 'work'を渡すと何が起こるかランク2の配列であり、'場合は、あなたの最後のポイントについては – francescalus
、? – francescalus
ありがとうございます。サブルーチンの中で、私は 'dgemm'を' work(:dim1、:dim2) 'を引数の1つとして呼び出すようなことをしています。呼び出し元のスコープ内で 'work'が2次元配列として宣言され、完全配列が渡された場合、これは一時配列の自動生成につながります。ポイントは、呼び出しごとに次元が異なることがありますが、私はワークスペースを1回だけ割り当てています。 –