加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi XE是否比Delphi 2007生成更快的代码?

发布时间:2020-12-15 06:10:42 所属栏目:大数据 来源:网络整理
导读:我一直在使用Delphi 2007来使用不需要Unicode的项目. 最近我一直在想Delphi XE,因为 大家都在赞美它 内置SVN支持 我想知道,编译器中是否有任何改进,使Delphi XE能够生成比Delphi 2007更快的代码,我在说的是: 更好地消除死代码(delphi 2007是体面的,但不能消
我一直在使用Delphi 2007来使用不需要Unicode的项目.

最近我一直在想Delphi XE,因为

大家都在赞美它
>内置SVN支持

我想知道,编译器中是否有任何改进,使Delphi XE能够生成比Delphi 2007更快的代码,我在说的是:

>更好地消除死代码(delphi 2007是体面的,但不能消除100%的死代码)
>循环展开(ala C的O3优化级别)
>自动内联短程序
>多线程代码中的开销更少

编辑

在这个页面上:http://www.embarcadero.com/products/delphi/whats-new

它列出:改进的编译器性能
那么究竟改进了什么呢?

解决方法

两点,为我的两分钱:

对于我们的开源ORM框架

当使用Delphi 7,Delphi 2007和Delphi 2010编译器运行our unit tests时,我发现Delphi 7和Delphi 2007之间的速度有所改善,但Delphi 2007与2010年之间并不明显.Delphi 2010生成的代码被发现甚至更慢.我手头没有Delphi XE编译器,但我猜这是Delphi 2010有点相似 – 主要是关于泛型的错误修复,AFAIR.

当我写低级别的pascal代码时,我在asm视图(Alt-F2)中花了很多时间,并使用了一个分析器.所以我通常会注意到Delphi编译器版本之间的区别.

IMHO的主要改进确实是方法和功能/程序的inline关键字,在Delphi 2007中可用,而不是在Delphi 7中.另一个改进是更积极的注册重用.

浮点生成代码仍然很慢,有时是awfull(FWAIT仍然生产,即使不再需要了,内联浮点代码甚至可以是worse than with no inlining!

我们的框架有趣,所有这些测试都是处理大量数据,使用自己的低级单元,以非常调优的pascal编码,以获得最佳性能.提供的单元测试(超过5,400,000个单独的测试)对实际数据(数字转换或UTF-8文本处理)工作,具有许多不同的过程,包括低级转换,文本解析,对象分配,多线程和客户端/服务器方向.所以在这里,编译器生成的代码确实有所作为.

代码主要在我们的框架内.我们使用我们自己的RawUTF8字符串类型,而不是通用字符串.因此,瓶颈不是VCL而是Windows API,而只是纯Delphi的编译代码.实际上,即使对于UTF-8编码或数字转换,我们也避免了大部分的API调用.

当然,我用PUREPASCAL条件集尝试了这个基准,即不在asm中运行优化的部分,而只依靠“纯pascal”代码.

2.对于SynLZ压缩单元

另一个有关速度的好的实验是在编写和分析我们的SynLZ compression unit.通过LZ压缩算法的优化实现,压缩比zip快20倍,减压速度提高了3倍.事实上,它与LZO竞争压缩比和解压缩速度,但是比LZO压缩速度快得多:SynLZ能够以与解压缩相同的速率来压缩数据.这种对称的实现在压缩世界中是非常罕见的.

它仅涉及整数算术和位逻辑,哈希表中的填充和查找以及内存副本.

我们写了一些非常调优的pascal代码,然后用Delphi 7和Delphi 2009进行编译.

Delphi 2009生成的代码比Delphi 7快得多,效果显着.生成的代码确实更好,更好的寄存器重用.

通过手动调试汇编程序,我们实现了更好的性能.例如,6 KB XML文件使用zip压缩为14 MB / s,使用LZO为185 MB / s,使用Delphi 2009 pascal版本的SynLZ为184 MB / s,使用最终调整的asm版本为256 MB / s SynLZ.

结论:

对于生成涉及整数处理,文本解析或内存的代码,我认为Delphi XE比Delphi 7要快,但应该与Delphi 2007大致相同.内联是主要的新功能,可以加快很多代码.

但对于现实世界的应用来说,速度的提升并不明显.在某些具体情况下,约10%或20%,而不是更多.算法始终是提高性能的关键. Delphi 7已经是一个很好的编译器.

对于浮点运算,Delphi编译器现在已被弃用.我希望64位编译器中的SSE代码会在这里改变结果.

直接回答您的问题,在Delphi 2010或XE中,没有自动内联和自动循环展开AFAIK.多线程代码的开销不是编译器的一部分,而是在库(FastMM4,引用计数等)上.所以我不认为Delphi XE比Delphi 2007产生更快的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读