c++ - Fortran 与 C++,如今 Fortran 在数值分析中是否仍然具有优势?

标签 c++ c cuda fortran

随着 C++ 编译器(尤其是 intel 编译器)的快速发展,以及在 C/C++ 代码中直接应用 SIMD 函数的能力,Fortran 在数值计算领域是否仍然具有真正的优势?

我来自应用数学背景,我的工作涉及大量数值分析、计算、优化等,并具有严格定义的性能要求。

我对 Fortran 几乎一无所知,我在 C/CUDA/matlab 方面有一些经验(如果您一开始就认为后者是一门计算机语言),而且我的日常任务涉及分析非常大的数据(例如 10GB-large矩阵),并且似乎该程序至少花费了 2/3 的时间在内存访问上(这就是为什么我将它的一些工作发送给 GPU),你们认为我尝试 fortran 例程可能值得吗?至少在我的代码的某些性能关键部分上提高我的程序的性能?

因为那里涉及的复杂性和需要完成的事情,如果只有那里有显着的性能优势,我只会执行该例程,在此先感谢。

最佳答案

与 C++ 相比,Fortran 具有严格的别名语义,并且几十年来一直在积极调整数值性能。使用 CPU 处理数据数组的算法通常有可能从 Fortran 实现中受益。

编程语言大战不应被太认真地对待,但在 15 个基准测试中,Fortran 在其中四个(对于英特尔 Q6600 单核)的速度排名第一,超过任何其他单一基准语。您可以看到 Fortran 最出色的基准是大量数值的基准:

反例:

  • k-nucleotide慢 500%(此基准主要关注更复杂的数据结构和字符串处理,这不是 Fortran 的强项)

您还可以看到一个摘要页面“how many times slower”,它显示在所有实现中,Fortran 代码平均最接近每个基准测试的最快实现——尽管分位数条比 C++ 大得多,表明 Fortran 不适合 C++ 擅长的某些任务,但您应该已经知道了。

所以你需要问自己的问题是:

  1. 这个函数的速度是否如此重要,以至于在 Fortran 中重新实现它值得我花时间?

  2. 性能如此重要,以至于我在学习 Fortran 方面的投资会得到返回吗?

  3. 是否可以使用像 ATLAS 这样的库来代替自己编写代码?

回答这些问题需要详细了解您的代码库和业务模型,因此我无法回答这些问题。但是,是的,Fortran 实现通常比 C++ 实现更快。

您做出决定的另一个因素是示例代码的数量和可用引用实现的数量。 Fortran 的悠久历史意味着有大量的数字代码可供下载,甚至可以访问图书馆。与往常一样,您需要筛选它才能找到好东西。

关于c++ - Fortran 与 C++,如今 Fortran 在数值分析中是否仍然具有优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078736/

相关文章:

C:为什么用 %s 打印空字符会打印 "(null)"?

c - pthreads 读取和写入同一个变量

c - 使用 SHFileOperation 按日期删除文件和文件夹

将 C 代码与 CUDA 链接时发生 CMake 错误

C++智能指针

c++ - 如何使用 Windows API C++ 更改已创建的文件夹/目录安全权限

c++ - 为什么我在声明中说 int *p = NULL ,但在测试中说 p != NULL ,为什么 *p != NULL 不匹配声明?

cuda - CUDA 中可能的最大块数是多少?

c++ - curand, thrust::随机

c# - 光线追踪器光线反射错误