performance - 提高 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
此错误总是发生在可执行编译步骤。
我想了解哪些因素会导致编译时间变慢并在编译步骤中占用内存。
解决方案
推荐阅读
- python - 为什么 ColumnTransformer 不调用 fit 它的变压器?
- javascript - 如何在 React JS 中应用动画
- twitter - Social Studio Radian6 获取推文数据
- python - 无法在烧瓶中使用 monogdb 运行 docker-compose
- java - 无法从数据库中检索数据(Firebase)
- ibm-mq - 我能否在仍使用 WAS 8.5.5 的同时将我的 MQ 版本升级到 9.0?
- r - 无法对下载按钮进行条件检查
- typescript - 打字稿推断方法的错误返回?
- angular - mat-select 覆盖变换 (cdk-overlay-pane)
- python - 在 PySpark 中加入多个数据框