我有一个Fortran程序。伪代码如下:
do x=1,nx
do y=1,ny
do z=1,nz
function(x,y,z)
end do
end do
end do
function(x,y,z)
if(var==1)
! do something
else if(var==2)
! do something else
end if
end
这里,变量var
在程序开始时从输入文件中读取,并且在执行过程中不改变。我读到if
检查深入到for/do
循环中,它可以通过忽略"缓存效果"来降低性能。由于变量不会随过程而改变,编译器是否可以对代码进行重新排序,以便可以看到缓存效果的好处?
如果不是这样,如何避免if
检查或更好的方法来实现这样的场景?
do x=1,nx
do y=1,ny
if (var == 1)
do z=1,nz
function1(x,y,z)
end do
else if (var == 2)
do z=1,nz
function2(x,y,z)
end do
endif
end do
end do