在 fortran/MPI 中使用索引变量减少运行时间
Decreasing runtime by using index variables in fortran/MPI
我在一些 CFD 代码中看到他们使用索引变量来访问不同的数组条目。以下是一个简短的例子:
integer :: i,j
integer :: im,ip
real,dimension(0:200,0:200) :: array
do i=1,199
ip = i+1
im = i-1
do j=0:200
var1(i) = 0.5 * ( array(ip,j) - array(i ,j) )
var2(i) = 0.5 * ( array(i ,j) - array(im,j) )
enddo
enddo
这样做有什么好处吗?关于运行时,如果我使用 array(i+1,j)
而不是 array(ip,j)
有区别吗?
理论上,你不必做200次加法,而是在循环之前做一次
do j=0,200
实际上,优化编译器应该能够为您优化此类用法。
我在一些 CFD 代码中看到他们使用索引变量来访问不同的数组条目。以下是一个简短的例子:
integer :: i,j
integer :: im,ip
real,dimension(0:200,0:200) :: array
do i=1,199
ip = i+1
im = i-1
do j=0:200
var1(i) = 0.5 * ( array(ip,j) - array(i ,j) )
var2(i) = 0.5 * ( array(i ,j) - array(im,j) )
enddo
enddo
这样做有什么好处吗?关于运行时,如果我使用 array(i+1,j)
而不是 array(ip,j)
有区别吗?
理论上,你不必做200次加法,而是在循环之前做一次
do j=0,200
实际上,优化编译器应该能够为您优化此类用法。