当前位置:  开发笔记 > 编程语言 > 正文

语言比C++更快

如何解决《语言比C++更快》经验,为你挑选了4个好方法。

据说Blitz ++提供了近Fortran性能.

对于等效任务,Fortran实际上往往比常规C++更快吗?

那些具有出色运行时性能的其他HL语言呢?我听说过几种语言在某些任务中使用C++ ... Objective Caml,Java,D ...

我猜GC可以更快地编写代码,因为它不需要在堆栈周围进行过多的复制?(假设代码不是为了性能编写的)

我是出于好奇而问 - 我一直认为C++几乎是无与伦比的专家ASM编码.



1> David Courna..:

对于纯粹的数字代码,Fortran比C++更快,几乎总是更好.Fortran更快的原因有很多.它是最古老的编译语言(优化编译器方面的许多知识).它仍然是数值计算的语言,因此许多编译器供应商以销售优化编译器为生.还有其他更多技术原因.Fortran(好吧,至少Fortran77)没有指针,因此没有混淆问题,这会困扰该域中的C/C++语言.许多高性能库仍然在Fortran中编码,历史悠久(> 30年).C或C++都没有任何好的数组结构(C级别太低,C++拥有与地球上编译器一样多的数组库,它们彼此不兼容,从而阻止了经过良好测试的快速代码池).


我没有说fortran比C更快(这个评论无论如何都没有意义),我说fortran比数字代码更快更优于C,特别是依赖数组的那个:更快更好的语法.shoutout是一个相对较差的基准BTW.
在http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=icpp&lang2=ifc&box=1的所有基准测试中,Fortran为什么*不比C++快*(在容错范围内)?

2> Rook..:

fortran是否比c ++更快是一个讨论问题.有人说是,有人说不; 我不会进入那个.这取决于编译器,运行它的体系结构,算法的实现......等等.

fortran 确实比C更具优势的是实现这些算法所需的时间.这使它非常适合任何类型的数值计算.我将陈述一些优于C的明显优势:

基于1的数组索引(在实现更大的模型时非常有用,而且您不必考虑它,而只是FORmula TRANslate

有一个权力运算符(**)(上帝,他的想法是权力函数会做什么?而不是运算符?!)

它有,我会说当前市场上所有语言的多维数组的最佳支持(它似乎不会那么快改变) - A(1,2)就像在数学中一样

更不用说避免循环 - A = B*C乘以数组(几乎就像matlab语法和编译速度一样)

它具有内置于语言中的并行功能(请查看此标准的新标准)

非常容易与C,python等语言连接,所以你可以在fortran中进行繁重的计算,而无论如何...用你选择的语言,如果你觉得这么倾向

完全向后兼容(因为整个F77是F90的一个子集),因此您可以随意使用整整一个世纪的编码

非常非常便携(这可能不适用于某些编译器扩展,但一般来说它就像一个魅力)

以问题为导向的解决社区(因为fortran用户通常不是cs,而是数学,phy,工程师......没有编程的人,而是解决问题的经验,他们对你的问题的了解非常有帮助)

现在不能想到其他任何事情,所以这将是必须的.


基于1的数组索引与诅咒同样是一种祝福.无论我使用哪种语言,无论哪种惯例,对于手头的问题,似乎相反的语言更自然......
是的,基于1的并不比基于0更好.我不知道它对任何模型有什么帮助 - 取决于字段,索引从0或1(或其他)开始.在信号处理中,开始索引为0是很常见的.
C缺少指数运算符,因为大多数CPU没有指数运算符.我的理解是,在C中,运算符被保留用于大多数硬件将在恒定时间内执行的功能,最多只有几条指令.
在"经典"工程领域(mech,geo,ocean,aero ....)中,使用了基于1的索引,没有进退两难的局面.数学家也使用1-based.我还发现1-based更合乎逻辑,如果有一个元素长度为array = 1,如果你在第5个元素上,= 5 ......那个有点事.
由于这些领域中的所有材料(书籍,文章......等等)都是使用该索引编写的,因此始终考虑索引翻译,可能非常(极端)疲劳.

3> Pontus Gagge..:

Blitz ++与之竞争的不仅仅是Fortran语言,而是进入Fortran数学库的几个世纪的工作.在某种程度上,语言有所帮助:旧语言有更多的时间来优化编译器(而且,让我们面对它,C++是最复杂的语言之一).另一方面,像Blitz ++和uBLAS这样的高级C++库允许您比相对低级的Fortran代码更清楚地陈述您的意图,并允许全新的编译时优化类.

但是,有效地使用任何库都需要开发人员熟悉语言,库数学.你通常可以通过改进三个中的任何一个来获得更快的代码......



4> 小智..:

由于语言实现数组的方式不同,FORTAN通常比C++更快地进行数组处理 - FORTRAN不允许数组元素的别名,而C++则不然.这使FORTRAN编译器工作更容易.此外,FORTRAN有许多非常成熟的数学库已经使用了近50年--C++已经存在了很长时间!

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有