我有一个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
检查或更好的方法来实现这种情况?
答案 0 :(得分:0)
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