假设我有以下 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
是一个指向 C 例程的指针,该例程在向量上工作并在变量x
中返回结果。value
这很有效,但我有一个问题:
向量的转换x
会极大地影响调用子程序的算法的复杂性f_test
。我的意思是,如果这样的算法调用f_test
n
时间,算法的复杂度将是二次的,但如果没有这种转换,它将只是线性的。因此,以这种方式进行的这种转换是不切实际的。有什么合理的方法可以解决这个问题吗?