翻译+分享:RyuJIT:下一代的JIT编译器
本帖最后由 caozhy 于 2013-10-03 20:55:05 编辑
RyuJIT:下一代的JIT编译器
整个世界正在向64位计算转移,即使它并不总是比32位更快或更有效率。当前的.NET JIT编译器就是一个使得64位计算机上有时导致程序速度减慢的的例子。但是,这将会被改变:一个新的,下一代x64的JIT编译器编译代码的速度将加快两倍,它将改变你对64位.NET代码的印象。
回顾64位计算
32位x86计算机的问世好比黑夜中迎来的天明,这是伟大的计算机架构,但它有很大的问题,32位指针只能寻址到4GB的内存。64位计算机拥有一个更宽的指针,几乎可以访问无限量的内存。当64位Windows问世的时候,内存还很昂贵,所以最初64位计算机只用于服务器。现在64位计算已经走向主流,现在计算机经常配置超过4GB的内存,甚至智能手机都转向64位,尽管事实上它们只有1GB的内存。
不同于.NET的x86的JIT,64位JIT最初设计为用于长时间运行的服务器进程产生高效的代码。而32位的JIT则为产生代码的速度优化,以便程序可以启动得更快。花更多时间编译代码对于64位程序主要用于服务器代码的时候是有意义的。但是,“服务器代码”如今包括了Web应用程序,它们必须启动更快。目前.NET的64位JIT中并不总是以最快的速度编译代码,这意味着必须依靠其它技术,比如NGen或后台JIT实现快速程序启动。
RyuJIT横空出世!
什么叫Ryu?它是.NET代码生成团队一直致力于打造的一个全新的、下一代的x64编译器,代号RyuJIT。这个新的JIT比原先的快两倍,这意味着用RyuJIT编译的应用程序启动速度将快30%(JIT编译器中所花的时间只是启动时间的一部分,所以应用程序的整个启动速度不会快两倍。)此外,新的JIT仍然会为长时间运行的服务器进程产生高效的代码。
这张曲线图比较了各种代码例程使用RyuJIT编译事件相较JIT64的比率(“吞吐量”)。每行显示RyuJIT相较JIT64的增长倍数,所以数字更高表示更好。
虽然所有的代码例程使用RyuJIT编译都加快了,但是应该引起注意的是第二行RFC822电子邮件正则表达式。它甚至超出了图表的宽度!这是因为正则表达式(缩写:RegEx)往往在目前的JIT64上表现得特别糟糕。编译这个基准,JIT64需要60秒,消耗峰值达1.4GB的工作集。用RyuJIT,它只需要1.8秒,以及消耗峰值仅199MB的工作集。
Paint.NET是一个RyuJIT赢得比较正常的例子。它在我们的测试环境中的启动时间从2.3秒减少到1.8秒。需要说明的是,其编译时间从JIT64的1510毫秒降低至RyuJIT的970毫秒。更快的编译速度以及使用更少的内存,使得所有的代码都运行得更好。
精彩的还在后面
RyuJIT的性能提升以及减少工作集需要量非常牛逼,但这些还不是RyuJIT最牛逼的地方。开发JIT64时,我们决定让它基于C++团队的优化编译器而不是基于现有的32位x86 JIT,从而为动态编译场景而优化。大多数64位的计算机被用作服务器,所以较之编译器的吞吐量更偏重生成的代码的质量。但是这曾使得.NET CodeGen团队需要同时维护两套代码库,分别为两者添加功能和修复BUG,因为放缓了创新的步伐。在最近几年中,增加ARM架构和Windows Phone 8.0的MDIL的支持越发难以跟上。
RyuJIT基于x86 JIT相同的代码库,虽然它现在只适用于x64。这是一个现代的编译器,将是在未来我们所有的JIT编译器的基础——x86、ARM 、MDIL以及其它以后增加的任何平台。单一的代码库使得.NET程序在不同的架构之间的表现更较为一致,一般可以获得bug对bug的兼容性。而且,单一的代码库也意味着我们可以更快地创新,并为您更快地带来更多的代码生成特性。
RyuJIT CTP下载地址:
http://aka.ms/RyuJIT
注意,只有Windows 8.1 x64和Windows Server 2012 R2支持,不能用于生产环境。
安装完以后只需要在注册表中HKLM\SOFTWARE\Microsoft\.NETFramework\AltJit设置为字符串"*"即可启用。安装RyuJIT不会永久更改你的电脑,你可以随时切换回来。启用RyuJIT会导致Edit and Continue不可用,这个需要注意下。
原文地址:
http://blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx
更多信息请关注微软CLR和代码生成团队的博客:
http://blogs.msdn.com/b/clrcodegeneration/
------解决方案--------------------不错的东西
------解决方案--------------------来看看,学习了。呵呵。。。。。
------解决方案--------------------为什么叫RyuJIT?
------解决方案--------------------------解决方案--------------------
希望好用吧,
------解决方案--------------------在计算机体系结构没有发生根本改变的情况下能让性能能有两倍的提升说明前面做的很差劲嘛。。。
------解决方案--------------------基本上不知在讲什么东东
------解决方案--------------------就是,还有脸还说