gpt4 book ai didi

performance - Fortran 模块性能

转载 作者:行者123 更新时间:2023-12-02 09:02:38 25 4
gpt4 key购买 nike

  MODULE fractions
real*8, parameter:: one_over_three = 1.d0/3.d0
real*8, parameter:: eleven_over_eighteen = 11.d0/18.d0
real*8, parameter:: five_over_64 = 5.d0/64.d0
real*8, parameter:: five_over_eight = 5.d0/8.d0
real*8, parameter:: five_over_sixteen = 5.d0/16.d0
real*8, parameter:: fiveteen_over_eight = 15.d0/8.d0
real*8, parameter:: fiveteen_over_four = 15.d0/4.d0
real*8, parameter:: fiveteen_over_two = 15.d0/2.d0
real*8, parameter:: fortyfive_over_eight = 45.d0/8.d0
real*8, parameter:: nine_over_two = 9.d0/2.d0
real*8, parameter:: one_over_eight = 1.d0/8.d0
real*8, parameter:: three_over_eight = 3.d0/8.d0
real*8, parameter:: three_over_two = 3.d0/2.d0
real*8, parameter:: two_over_three = 2.d0/3.d0
real*8, parameter:: eight_over_three = 8.d0/3.d0
real*8, parameter:: seven_over_two = 7.d0/2.d0
END MODULE fractions

在我的 Fortran 程序中,我必须多次调用同一个子例程。它涉及几个分数。如果我使用上述模块或让程序在调用子例程并使用该模块时执行分数计算,是否会提高子例程的性能?

最佳答案

在优化编译器时这并不重要。这些分数无论出现在哪里都会被预先计算。无论您是编写 two_over_two 还是 3.d0/2.d0 或者直接说 3/2d0,性能都应该是相同的。

就我个人而言,我不会打扰这样的模块,它会影响可读性。这是个体的,局部常量通常可能有利于可读性。但我会将其保留在本地(而不是在常量的专用模块中),并且我会根据常量的用途而不是根据其值来命名常量。

注释显示了一个潜在问题,可能需要一对括号,即 x*3./2. 实际上意味着 (x*3.)/2.。我个人倾向于将这些因素放在表达式的开头,因此这不是一个问题,但最好考虑到这一点。

关于performance - Fortran 模块性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62173962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com