現在、Arrayfire を使用して Fortran CFD ソルバーを高速化しています。Fortran 配列を実装する方法は、2 次元の Fortran 配列が (N,M) ではなく (N,M,1) で表されることを意味し、割付け可能な配列が 2 次元または 3 次元の引数を処理できるようにします。ただし、これらのいずれかがデバイスにコピーされて Arrayfire Array になると、(N,M,1) ではなく (N,M) の次元が自動的に与えられるようです。これにより、アレイがホストにコピーされて戻されるときに寸法の不一致が発生します。
この動作を変更する方法はありますか? 2 次元配列を別の方法で処理するようにソルバーの大部分を書き直すのはかなり難しいでしょう。
この動作を示すテストケースを次に示します。
program testcase
use arrayfire
implicit none
real,dimension(4,4,1) :: a = 5.0
real,dimension(:,:,:),allocatable :: b
type(array) ARR1
ARR1 = a
b=ARR1
end program testcase
私は Arrayfire フォーラムでもこれを尋ねましたが、他の誰かがこれに問題として遭遇したかどうか疑問に思っていました.
編集: テスト ケースのみが 2D 配列で実行されていたため、これはもはや問題ではありません。
ありがとう、ハリー