【问题标题】:Why is MinGW gfortran on Windows extremely slow?为什么 Windows 上的 MinGW gfortran 非常慢?
【发布时间】:2021-09-30 07:13:21
【问题描述】:

我已经在 MinGW 上的 Windows 10 上安装了 gfortran(我不记得是如何安装的,它是一些现成的包)。我在文件 helloworld.f90

上编写了这个 fortran 程序
program helloworld

    print *,'Hello World'

end program helloworld

并在命令提示符中编译它

gfortran helloworld.f90 -o hello

我正在测试 ptime 需要多长时间

C:\fortran tests>ptime hello
===  hello ===
 Hello World
Execution time: 23.703 s 

C:\fortran tests>ptime hello
===  hello ===
 Hello World
Execution time: 1.225 s

C:\fortran tests>ptime hello
===  hello ===
 Hello World
Execution time: 1.227 s

我在没有ptime 的情况下测试了它,手动使用秒表,得到了相似的时间,所以我认为ptime 不会导致这种情况。什么可能导致这个极其缓慢的第一次运行 23 秒?为什么下次会更快?而且我认为超过 1s 仍然非常缓慢。我应该查找哪些设置以及如何查找?我在 SOF 中找不到类似的东西。另外,在我的 VirtualBox Ubuntu 上不会出现这个问题,只有在 Windows 上才会出现。

【问题讨论】:

  • 病毒扫描程序和 Windows 缓存可执行文件 / dll 的 / 路径等怎么样?您是否尝试过使用小型 C 程序?
  • 我的病毒扫描程序搞砸了(见下文),使用 C 时甚至比使用 Fortran 更糟糕:病毒扫描程序自动删除了我的 .exe 文件并警告可疑/有害文件!

标签: windows performance mingw gfortran


【解决方案1】:

原来问题出在我的病毒扫描程序上。感谢@albert 的提示。

这是公司的笔记本电脑,我无法关闭病毒扫描程序。我以安全模式启动,现在病毒扫描程序已关闭,hello.exe 运行时间为 0.029 秒。似乎合法。

旁注:我尝试在安全模式下运行的几乎所有其他 fortran 测试程序都失败并显示错误消息“找不到lib(...).dll”但这将是另一个话题。

【讨论】:

    【解决方案2】:

    如果你从某个地方得到gfortran,但你不知道它可能来自 MinGW,那么你可能有一个非常旧的版本。

    您可以使用gfortran --version 查看版本。它是 GCC 编译器套件的一部分,在撰写本文时,当前版本为 11.2.0。

    您可以从 https://winlibs.com/ 获取最新版本的 GCC 编译器套件作为独立版本(无需安装程序,只需解压缩),其中包含工作中的 gfortran

    【讨论】:

    • 旧版本的 gfortran 在打印语句方面特别差吗?
    • 没有必要,但是在混合不同的标准库时可能会发生这种情况,而且你不确定你从哪里得到gfortran,最好确保你有一个稳固的工作环境......无论如何,独立版本不需要安装,因此您无需卸载或修改现有安装即可试用。
    • 是的,我的 MinGW 是 6.3 版,现在是 11.2 版。但问题依然存在;事实上,它在编译后的第一次运行时甚至会减慢到 32 秒
    • 奇怪,我无法重现您的问题。你试过在另一台电脑上运行它吗?您也可以尝试在没有调试信息和/或静态构建的情况下构建。
    • 你试过不用病毒扫描器吗?
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2013-06-29
    • 2020-06-11
    • 1970-01-01
    • 2012-01-24
    • 2010-12-17
    相关资源
    最近更新 更多