通过额外的优化标志减少 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 奇怪行为