include语句中do循环的fortran编译器优化



我有一个用于HPC的大型Fortran代码,其中几个方程在计算网格上求解。因此,在源代码的许多地方都被嵌套,在entair计算域上循环,称为

do k = 1,number_of_point_in_z
do j = 1,number_of_point_in_y
do i = 1,number_of_point_in_x
... some operations ...
end do
end do
end do

我想用一个单一的统计数据替换这些行,我发现唯一的解决方案是使用包含统计数据,作为

include 'start_domain_cycle'
... some operations ...
include 'end_domain_cycle'

其中两个名为start_domain_cycle和end_domain_ccycle的文件定义如下

block
integer :: i, j, k
do k = 1,number_of_point_in_z
do j = 1,number_of_point_in_y
do i = 1,number_of_point_in_x

end do
end do
end do
end block

我的问题是:

  1. 在使用优化进行编译时,编译器是否能够优化此代码?(例如-O3与gfortran(
  2. 有没有更好的解决方案可以避免每次do循环时都进行硬编码
  1. include文件中的源代码首先插入include所在的位置,然后编译完整的代码。因此,从优化的角度来看,这没有什么区别。

  2. 个人喜好的问题。。。我发现把整个代码放在一起更可读,但这只是我的看法。您也可以将3个do附加在一行上(为了可读性,使用较短的变量名(

do k = 1,nz ; do j = 1,ny ; do i = 1,nx

最新更新