首页 > 解决方案 > 提高 fortran 编译器性能(编译时间和内存)

问题描述

我有一个使用 cmake 和 make 或 Visual Studio 构建的跨平台项目,主​​要是 Fortran 源代码。源文件的大小从大约 1000 行(10 到 100 KB)到最大的 31000 (1.3MB) 行不等。但是,即使与make -jN. 有 14 个模块最终被导入并链接以构建最终的可执行文件。模块可以静态或动态链接。它一直是最后一步:编译可执行文件的源文件并与模块库链接。我正在使用 gfortran (gcc@7.3) 和 ifort (intel 2017) 编译器。

上面提到的 31,000 行文件是在可执行源代码中导入的,而不是在任何底层库中。我尝试将可执行源文件分解为较小的文件,尽管它们一开始就相对较小。但是,可执行源最终会导入大部分链接的库。我还尝试只导入大型库中需要的部分而不是所有内容。例如,我在几个模块USE ModuleSubs中用 this替换USE ModuleSubs, ONLY: ElemOpen了它,但它还没有对编译速度产生影响。话虽如此,这很难准确计时,因为我每次都在更改不同的文件,这意味着每次编译尝试都与以前不同。

在一些系统上(例如 cygwin 和 docker 容器),fortran 编译器内存不足并中止并出现以下错误:

f951: out of memory allocating 65536 bytes after a total of 2601426944 bytes

此错误总是发生在可执行编译步骤。

我想了解哪些因素会导致编译时间变慢并在编译步骤中占用内存。

标签: performancecompilationfortrangfortran

解决方案


推荐阅读