随着C++编译器(尤其是intel编译器)的快速发展,以及在C/C++代码中直接应用SIMD函数的能力,Fortran在数值计算领域是否仍然具有真正的优势?
我来自应用数学背景,我的工作涉及大量的数值分析、计算、优化等,并且有严格定义的性能要求。
我对 Fortran 几乎一无所知,我对 C/CUDA/matlab 有一些经验(如果你一开始就将后者视为计算机语言),而且我的日常任务涉及分析非常大的数据(例如 10GB 大矩阵),看起来该程序至少花费了 2/3 的时间来访问内存(这就是为什么我将其部分工作发送给 GPU),你们认为对我来说至少尝试 fortran 例程可能值得吗?我的代码的一些性能关键部分来提高我的程序的性能?
由于其中涉及复杂性和需要完成的事情,因此只有在能够显着提高性能的情况下,我才会采用该例程,提前致谢。
与 C++ 相比,Fortran 具有严格的别名语义,并且几十年来一直在积极调整数值性能。使用 CPU 处理数据数组的算法通常有可能从 Fortran 实现中受益。
编程语言的较量不应被过于认真地对待,但在 15 个基准测试中,Fortran 在速度方面排名第一four其中(对于 Intel Q6600 一个核心),比任何其他单一语言都多。您可以看到 Fortran 表现出色的基准是大量数值基准:
-
谱范数 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=spectralnorm速度提高 27%
-
fasta http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=fasta速度提高 67%
-
曼德尔布罗特 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=mandelbrot速度提高 56%
-
pidigits http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=pidigits速度提高 18%
反例:
-
k-核苷酸 http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide慢 500%(该基准测试主要关注更复杂的数据结构和字符串处理,这不是 Fortran 的强项)
您还可以看到摘要页面“慢了多少倍 http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html”这表明,在所有实现中,Fortran 代码平均最接近每个基准测试的最快实现 - 尽管分位数条比 C++ 大得多,表明 Fortran 不适合 C++ 擅长的某些任务,但是你应该已经知道了。
因此,您需要问自己的问题是:
这个函数的速度是否如此重要以至于值得我花时间在 Fortran 中重新实现它?
性能是否如此重要以至于我学习 Fortran 的投资会得到回报?
是否可以使用像 ATLAS 这样的库而不是自己编写代码?
回答这些问题需要详细了解您的代码库和业务模型,因此我无法回答这些问题。但是,Fortran 实现通常比 C++ 实现更快。
决定的另一个因素是示例代码的数量和可用的参考实现的数量。 Fortran 悠久的历史意味着有大量的数字代码可供下载,甚至可以去图书馆下载。与往常一样,您需要仔细筛选才能找到好东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)