1

次の Fortran サブルーチンがあるとします。

subroutine f_test(n,x,value)

    use iso_c_binding

    implicit none

    integer,      intent(in)  :: n
    real(kind=8), intent(in)  :: x(n)
    real(kind=8), intent(out) :: value

    integer(kind=c_int) :: n_
    real(kind=c_double) :: value_,x_(n)

    n_     = transfer( n, n_ )
    x(1:n) = transfer( x(1:n), x_(1:n) )

    call c_test(n_,x_,value_)

    value = transfer( value_, value )

end subroutine f_test

また、これc_testは、ベクトルに対して機能し、結果を変数xに返すC ルーチンへのポインターであるとします。value

これは完全に機能しますが、それについて質問があります。

ベクトルの変換はx、サブルーチンを呼び出すアルゴリズムの複雑さに劇的な影響を与える可能性がありますf_test。つまり、そのようなアルゴリズムが時間を呼び出す場合、アルゴリズムf_test nの複雑さは 2 次になりますが、この変換がなければ単純に線形になります。したがって、この方法で行われるこの変換は実際的ではありません。この問題を回避する合理的な方法はありますか?

4

2 に答える 2