Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization 固定格式源代码中的Fortran是否更易于编译器优化?_Optimization_Fortran - Fatal编程技术网

Optimization 固定格式源代码中的Fortran是否更易于编译器优化?

Optimization 固定格式源代码中的Fortran是否更易于编译器优化?,optimization,fortran,Optimization,Fortran,从我在互联网上发现的情况来看,固定格式Fortran是人们在科学计算中偶尔需要处理的东西。我听说它主要是在维护旧程序的背景下,以更易于维护的形式重写旧程序会非常昂贵 但是,当从头开始编写Fortran程序时,使用限制性更强的固定格式比自由格式有什么优势吗 更具体地说,我所说的“优势”是指固定形式的程序比自由形式的等效程序在计算效率上更高。这个问题有一些微妙的方面,但简单的答案是“不”(对于理解两种形式的编译器来说) 编译器通常分多个阶段运行。当涉及到优化时,编译器不会查看源代码行并决定如何处理它

从我在互联网上发现的情况来看,固定格式Fortran是人们在科学计算中偶尔需要处理的东西。我听说它主要是在维护旧程序的背景下,以更易于维护的形式重写旧程序会非常昂贵

但是,当从头开始编写Fortran程序时,使用限制性更强的固定格式比自由格式有什么优势吗


更具体地说,我所说的“优势”是指固定形式的程序比自由形式的等效程序在计算效率上更高。

这个问题有一些微妙的方面,但简单的答案是“不”(对于理解两种形式的编译器来说)

编译器通常分多个阶段运行。当涉及到优化时,编译器不会查看源代码行并决定如何处理它

编译的早期阶段是词汇阶段。这将获取源代码并确定存在哪些令牌。考虑源

do 77 i=1, 5
  x(i) = 1.0
77 continue
它是自由形式的,并且

      do77i=1,5
      x(i)=1.0
   77 continue
      do 77 i=1,5
        x(i) = 1.0
   77 continue
是固定形式的,并且

      do77i=1,5
      x(i)=1.0
   77 continue
      do 77 i=1,5
        x(i) = 1.0
   77 continue
这在两种情况下都是有效的

在词法阶段之后,编译器的内部表示是相同的(至少确定了完全相同的标记集)。接下来发生的事情独立于预变形源

一个并发症是人们经常认为自由形式意味着

x(1:5) = 1.0
因为这是Fortran 90+编写相同作业的方法

这同样可以用固定的形式书写

      x(1:5) = 1.0

而代币又是一样的。现在,编译器对待这两种方法的方式可能会有所不同,但源代码形式不是关键。

我认为问题更像是“如果我编写完全相同的代码并以固定的形式编写,它会比自由形式更快吗?”。这个问题有一个明确的答案。@francescalus“优化优势”我指的是一个更高效的编译程序,而不是一个更容易为编译器优化的源文件。在提出这个问题时,我希望通过询问速度优势来避免让人觉得它是基于观点的,而不是“固定形式比自由形式好吗?”我可能忽略了澄清这一点。固定形式和自由形式是这个问题的简单部分:没有区别。编译器更容易优化的是更难解释或理解的部分。自由形式可能意味着使用更现代的编码方法,这可能是有帮助的,但如何实现最佳;事实上,编译器的大部分工作与源代码的编写语言无关,更不用说它的编写风格了。