optimization - `USE` 对性能的影响

标签 optimization fortran

我目前正在编写一个大型 fortran 90 代码。大多数模块都有大量的子程序(>15)。模块 USE 其他模块在其规范部分,而它们的子例程 USE 其他模块在其之上。这是它的样子:

MODULE OneModule
USE GlobalConstant
USE GlobalVariable

CONTAINS
    SUBROUTINE Subroutine1()
    [...]
    END SUBROUTINE Subroutine1

    SUBROUTINE Subroutine2()
    USE Mesh
    [...]
    END SUBROUTINE Subroutine2

    [Other Subroutines]
 END MODULE OneModule

在每个模块中都看到了这一点,我想知道这样做是为了清晰还是优化。如果模块OneModule有大量子程序,如果我们在规范部分USE模块MESH如果只有少数,会不会影响性能?这些子程序中的哪些需要它?

最佳答案

考虑到典型的编译器实现,如果 USE 的定位对执行时间有任何影响,我会感到震惊(并向编译器供应商写错误报告)。它可能会对编译时间产生无关紧要的影响。

在内部或外部范围内定位更多的是首选编程风格与标识符可访问性的程序要求相交的问题。

(有一个异常(exception),但在这里不相关。F2003 引入了一组用于 IEEE 浮点支持的内在(编译器提供)模块。其中一些模块的存在可以改变编译器生成的代码对于 USE 范围内的任何内容。)

关于optimization - `USE` 对性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21255790/

相关文章:

c++ - 使用参数优化编译器

optimization - D中的常量与枚举

python - F2PY 与具有回调参数和假定形状数组参数的子例程

c - MPI中如何获取物理机数量

c++ - Instruments Call Tree 破坏了 R、C++ 和 Fortran 的混合

c++ - MSVC下的奇优化问题

sql - 为什么这会加速我的 SQL 查询?

java - 守卫是否检查方法是否已被 Java 优化调用?

fortran - Fortran 编译器是否强制或假定 PURE 关键字为真?

list - Fortran:如何在模块中赋值