通过额外的优化标志减少 fortran 运行时间

Posted

技术标签:

【中文标题】通过额外的优化标志减少 fortran 运行时间【英文标题】:Decreasing the fortran run time by extra optimization flags 【发布时间】:2013-02-01 02:15:49 【问题描述】:

一段时间以来,我一直在尝试优化我的程序。它有100多个子程序。到目前为止,我在英特尔 Fortran 编译器中使用的优化标志如下。

Optimization flag Time of completion
-c                     0.190 hr
-O3                    0.185 hr
-fast                  0.155 hr

因此,使用优化标志“-fast”我能够获得 18.42% 的速度。我想知道是否有任何其他优化标志可以让我的程序运行得更快。因为现在,当我针对我的一个问题只使用 O2 标志运行我的程序时,大约需要 25 小时才能完成。我真的需要提高计算效率。

我从https://support.scinet.utoronto.ca/wiki/images/7/77/Snug_techtalk_compiler.pdf找到了关于“-fast”标志的信息

我在 linux 中使用 intel fortran 13.1 编译器。

非常感谢任何帮助。

非常感谢。

最好的问候,

贾巴巴

【问题讨论】:

将标题更改为“减少运行时间”(而不是“增加”),因为这正是您真正要问的。您可能想尝试-faster-warp=11-so_damn_fast_it_ends_before_it_starts 标志:-) @paxdiablo 感谢您的回复和编辑我的帖子标题。我将尝试使用您建议的优化标志,如果有任何速度提升,我将发布。除了 -fast 或单独使用此优化标志吗? 你做错什么了吗?是的!你没有在我的评论中看到幽默 :-) 我本以为第三个标志就很明显了,但是,就像我的妻子一样,地球上的绝大多数人都不理解我严重扭曲的幽默感。对此感到抱歉。 在充分尊重@paxdiablo 的情况下,我建议 OP 查阅英特尔 Fortran 编译器手册,以获取有关编译器标志的可用性和影响的更多信息。我建议 OP 也参考英特尔关于优化 Fortran 程序的出版物。哦,别忘了分析你的应用程序。 英特尔在优化方面有一个reference guide。手动分析当然是有见地的。此外,您可以使用-opt-report-guide-par-report 来获取有关 ifort 可以对您的代码做什么的详细报告。 -prof-gen-prof-use 也很有用,可以使用分析数据进一步优化程序。 【参考方案1】:

您没有说您使用的是哪个编译器,而是通过您的链接暗示英特尔。使用 Intel ifort,您可以尝试 -parallel 并获得自动并行化。过去某个时间点,编译器会在您的源代码上尽其所能,进一步减少运行时间将需要改进错误的编码决策或算法改进,我们都没有来自您的问题的信息来提供具体建议。 “分析”是确定你的程序在哪里花费它的运行时间。如果程序只在子例程 A 中花费 1% 的运行时间,那么让子例程 A 的运行速度提高 10 倍是没有意义的……你将获得很少的整体改进。最好处理程序花费 80% 或 50% 或...运行时的子例程。

【讨论】:

感谢 M.S.B 的回复。是的,你是对的。我使用英特尔编译器。我将确定程序花费更多时间的子程序。是否可以在编译代码时弄清楚这一点?我也会研究代码本身以找出答案。实际上,这些不是我自己的代码。我从另一个来源获得了代码,我正在努力让它更快。谢谢。 现在您知道什么是概要分析以及它为什么重要了。不,您无法在不执行代码的情况下进行分析。英特尔提供 VTune 工具进行分析,如果您没有可用的工具,您可以使用在 Linux 机器上广泛使用的gprof @High Performance Mark ,我需要为程序使用哪个标志才能用于 Vtune 工具。实际上,我的计算机上有 vtune,但是当我加载已编译的程序时,它总是会出错。它说未能最终确定结果。我真的不知道如何开始使用 Vtune。 关于学习VTune,先阅读入门文档;英特尔提供了很多,其中一些非常好。 SO 不适合我给你 VTune 教程。

以上是关于通过额外的优化标志减少 fortran 运行时间的主要内容,如果未能解决你的问题,请参考以下文章

Linux 上 fortran 代码的 Intel Vtune 奇怪行为

将python嵌入fortran 90

CMake Fortran 编译器相关标志

是否可以让 Fortran 源代码检测编译器标志?

cmake可以自动添加fortran预处理器-cpp标志吗?

GridBagLayout为列提供额外的余量