据说Blitz ++提供了近Fortran性能.
对于等效任务,Fortran实际上往往比常规C++更快吗?
那些具有出色运行时性能的其他HL语言呢?我听说过几种语言在某些任务中使用C++ ... Objective Caml,Java,D ...
我猜GC可以更快地编写代码,因为它不需要在堆栈周围进行过多的复制?(假设代码不是为了性能而编写的)
我是出于好奇而问 - 我一直认为C++几乎是无与伦比的专家ASM编码.
对于纯粹的数字代码,Fortran比C++更快,几乎总是更好.Fortran更快的原因有很多.它是最古老的编译语言(优化编译器方面的许多知识).它仍然是数值计算的语言,因此许多编译器供应商以销售优化编译器为生.还有其他更多技术原因.Fortran(好吧,至少Fortran77)没有指针,因此没有混淆问题,这会困扰该域中的C/C++语言.许多高性能库仍然在Fortran中编码,历史悠久(> 30年).C或C++都没有任何好的数组结构(C级别太低,C++拥有与地球上编译器一样多的数组库,它们彼此不兼容,从而阻止了经过良好测试的快速代码池).
fortran是否比c ++更快是一个讨论问题.有人说是,有人说不; 我不会进入那个.这取决于编译器,运行它的体系结构,算法的实现......等等.
fortran 确实比C更具优势的是实现这些算法所需的时间.这使它非常适合任何类型的数值计算.我将陈述一些优于C的明显优势:
基于1的数组索引(在实现更大的模型时非常有用,而且您不必考虑它,而只是FORmula TRANslate
有一个权力运算符(**
)(上帝,他的想法是权力函数会做什么?而不是运算符?!)
它有,我会说当前市场上所有语言的多维数组的最佳支持(它似乎不会那么快改变) - A(1,2)
就像在数学中一样
更不用说避免循环 - A = B*C乘以数组(几乎就像matlab语法和编译速度一样)
它具有内置于语言中的并行功能(请查看此标准的新标准)
非常容易与C,python等语言连接,所以你可以在fortran中进行繁重的计算,而无论如何...用你选择的语言,如果你觉得这么倾向
完全向后兼容(因为整个F77是F90的一个子集),因此您可以随意使用整整一个世纪的编码
非常非常便携(这可能不适用于某些编译器扩展,但一般来说它就像一个魅力)
以问题为导向的解决社区(因为fortran用户通常不是cs,而是数学,phy,工程师......没有编程的人,而是解决问题的经验,他们对你的问题的了解非常有帮助)
现在不能想到其他任何事情,所以这将是必须的.
Blitz ++与之竞争的不仅仅是Fortran语言,而是进入Fortran数学库的几个世纪的工作.在某种程度上,语言有所帮助:旧语言有更多的时间来优化编译器(而且,让我们面对它,C++是最复杂的语言之一).另一方面,像Blitz ++和uBLAS这样的高级C++库允许您比相对低级的Fortran代码更清楚地陈述您的意图,并允许全新的编译时优化类.
但是,有效地使用任何库都需要开发人员熟悉语言,库和数学.你通常可以通过改进三个中的任何一个来获得更快的代码......
由于语言实现数组的方式不同,FORTAN通常比C++更快地进行数组处理 - FORTRAN不允许数组元素的别名,而C++则不然.这使FORTRAN编译器工作更容易.此外,FORTRAN有许多非常成熟的数学库已经使用了近50年--C++已经存在了很长时间!