Fortran vs C++,Fortran如今仍然在数值分析方面有任何优势吗?

use*_*128 46 c c++ fortran cuda

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

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

我对Fortran几乎一无所知,我在C/CUDA/matlab方面有一些经验(如果你认为后者是一种计算机语言),我的日常任务包括分析非常大的数据(例如10GB大的矩阵),并且看起来该程序至少花费2/3的时间来访问内存(这就是为什么我将其部分工作发送到GPU),你是否认为对我来说至少尝试Fortran例程可能是值得的我的代码中一些性能至关重要的部分,以提高我的程序的性能?

因为那里需要完成复杂性和事情,所以如果只有那里有显着的性能优势,我只会这样做,感谢提前.

Die*_*Epp 58

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

编程语言的枪战不应该过于严肃,但在15个基准测试中,Fortran在其中四个(英特尔Q6600一个核心)的速度排名第一,比任何其他单一语言都要多.你可以看到Fortran闪耀的基准是大量的数字:

反例:

  • k-核苷酸减慢500%(这个基准测试主要集中在更复杂的数据结构和字符串处理上,这不是Fortran的强项)

您还可以看到一个摘要页面" 缓慢多少次 ",表明在所有实现中,Fortran代码平均最接近每个基准测试的最快实现 - 尽管分位数条比C++大得多,表明Fortran不适合C++擅长的一些任务,但你应该已经知道了.

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

  1. 这个功能的速度如此重要,以至于在Fortran重新实现它是值得的吗?

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

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

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

您决定的另一个因素是示例代码的数量和可用的参考实现的数量.Fortran强大的历史意味着有大量的数字代码可供下载,甚至可以去图书馆.一如既往,你需要筛选它以找到好东西.

  • @VladimirF:是的,它有缺陷.我认为没有办法比较没有缺陷的语言. (17认同)
  • 正如我所说,不要比较苹果和橘子,而是g ++与gfortran和ifort与intel的c ++. (5认同)
  • 顺便说一下,这可能会降低Fortran相对于C++的速度优势,但它仍然不会阻止我选择Fortran,因为真正的优势在于其他地方.语言简单性和数组操作的良好语法. (3认同)
  • 根据枪战比较这两种语言确实存在缺陷.至少应该使用相同的供应商. (2认同)
  • 很多人说c ++比fortran慢,特别是数值编程.但是使用gfortran和g ++,我总是设法优化我的c ++代码,至少和我的fortran代码一样快.我发现有时c ++较慢的主要原因是编译器关于指针别名的假设,可以通过restrict关键字来解决. (2认同)

Jon*_*rsi 16

对你的问题的完整和正确答案是,"是的,Fortran确实有一些优势".

C++也有一些不同的优点.Python,R等等也是如此.它们是不同的语言.用一种语言做一些事情会更容易,更快,有些则更容易.所有这些都被广泛用于他们的社区,并且有很好的理由.

在没有更具体的问题的情况下,任何其他事情只是噪音和语言 - 战争诱饵,这就是为什么我投票结束这个问题并希望其他人也会这样做.


har*_*dkl 8

Fortran非常适合数值编程.您倾向于在此类程序中拥有大量数字,通常是排列数组.数组是Fortran中的一等公民,将数值内核从Matlab转换为Fortran通常非常简单.关于潜在的性能优势,请参阅其他答案,这很好地涵盖了这一点.基线可能是你现在可以使用大多数编译语言创建高效的数值应用程序,但是你可能会跳过一些循环来实现目标.由于语言特性,Fortran经过精心设计,允许编译器识别大多数优化点.当然,您也可以使用任何编译语言编写任意慢速代码,包括Fortran.无论如何,你应该选择合适的工具.Fortran适合数值应用,C适合系统相关的开发.最后一点,学习Fortran基础知识并不难,而且总是值得一看其他语言.这会打开您想要解决的问题的不同视图.


sao*_*lof 8

另外值得一提的是Fortran比C++更容易掌握.事实上,Fortran的语言规范比普通的C语言短,而且它的语法可以说更简单.你可以很快拿起它.

这意味着如果您只是想学习C++或Fortran来解决您目前遇到的一个特定问题(比如,为了加快您使用原型语言编写的内容的瓶颈),Fortran可能会给您更好的投资回报.