在FORTRAN中将数字定义为参数是否有性能优势

时间:2018-12-12 18:02:31

标签: fortran vectorization

我正在尝试编写向量化的FORTRAN子例程,以将其合并到Abaqus有限元求解器中。一些学习材料定义了常数,这些常数在公式的开头用作代码开头的参数,例如:

parameter ( zero = 0.d0, one = 1.d0, two = 2.d0, third = 1.d0 / 3.d0, half = 0.5d0, op5 = 1.5d0)

因此,与其写0.5 * a,不如写half * a。有性能优势吗?

编辑:我在this file的第11页(幻灯片A3.22)中进行了深入研究:

  

PARAMETER分配产生准确的浮点常数   任何平台上的定义。

1 个答案:

答案 0 :(得分:9)

不,没有任何性能差异。生成的代码将完全相同。可能只是为了使使用这些数字更方便或(应该)可读。

但是您必须小心。 (默认)单精度数字只有0.5。您必须使用常量定义中使用的方式。 0.5d0是双精度,常数将帮助您不要忘记d0。在二进制数字格式中,无论如何,0.5都可以精确表示,但是例如三分之一则不能。