質問の趣旨
明らかに計算結果の一時保存のためにしか用いられない引数には何か意図があるのか?
質問の背景
行列計算をする数値計算プログラムでは、行列に対応する巨大な配列を取り扱うことがよくあります。
例えば、いくつかの行列を受け取って所定の手続きに従って計算し、得られた行列を返すサブルーチンを考えます。
以下では、2次元配列は正方行列を示し、サブルーチンmatMultiplyは第一引数と第二引数の正方行列の積を計算して出力を第三引数に返す手続きです。
一つの例として以下のようなexample1を示します。実際に存在するコードはこちらです。
FORTRAN
1subroutine example1(A,B,C,D,TMP,SCR) 2 double precision, dimension(:,:), intent(in) :: A, B, C 3 integer, intent(in) :: Nsize 4 double precision, dimension(:,:), intent(out) :: D 5 double precision, dimension(:,:), intent(inout) :: TMP, SCR 6 7 call matMultiply(A, B, tmp) 8 call matMultiply(B, C, scr) 9 call matMultiply(tmp, scr, D) 10 return 11end
一方、同様の動作をする(と思われる)サブルーチンexample2を示します。私はexample1をexample2へ書き直したいと思っています。
FORTRAN
1subroutine example2(A,B,C,D,Nsize) 2 double precision, dimension(:,:), intent(in) :: A, B, C 3 integer, intent(in) :: Nsize 4 double precision, dimension(:,:), intent(out) :: D 5 6 double precision, dimension(Nsize,Nsize) :: tmp, scr 7 8 call matMultiply(A, B, tmp) 9 call matMultiply(B, C, scr) 10 call matMultiply(tmp, scr, D) 11 return 12end
質問
example1とexample2には何か動作で得られる結果に違いはありますか?
結果に違いがない場合、example1のように各メリットはありますか?
メモリ確保の時間を節約するためのテクニックなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/20 23:50
2022/05/28 08:01