循环自变量的编译器优化

时间:2016-07-29 14:05:20

标签: optimization fortran compiler-optimization

我有一个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检查或更好的方法来实现这种情况?

1 个答案:

答案 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