首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ngen vs RyuJIT -在启动(预)不重要时运行最快的x64代码

Ngen vs RyuJIT -在启动(预)不重要时运行最快的x64代码
EN

Stack Overflow用户
提问于 2015-11-11 09:22:34
回答 1查看 1.8K关注 0票数 6

在RyuJIT 4.6下(特别是不同的优化技术和算法),Ngen和.NET是两个完全不相关的东西吗?

如果我们不关心跳转本身和/或冷/热启动时间的成本,那么是什么产生了最快(更优化的) x64本机代码?

我们正在运行一个长时间运行的服务器应用程序。连续运行阶段在性能上是非常重要的.(预)启动阶段对我们来说并不重要。到目前为止,我们已经在.NET 4.5上,并且总是通过Ngen生成本地图像。我们现在正在升级到.NET 4.6,我们希望确保这不会降低我们连续运行阶段的性能。我读到了一些信息,RyuJIT是改善JITing时间的最佳选择,但是与Ngen相比,but代码可能没有那么优化-参见这个github对一个RyuJIT错误的评论

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-11 10:15:36

NGen和RyuJIT之间没有足够的差别来让你快乐。它们所做的工作非常不同,在进程运行时,NGen jits提前执行,RyuJIT jits则及时执行。但是NGen没有自己的抖动,它要求RyuJIT完成任务。生成的机器代码没有本质上的不同。有一些优化是不能预先完成的,NGen-ed代码稍微慢一点。

从技术上讲,NGen可以做得更好,因为优化器可以花费更多的时间来分析代码并试图找到最佳的优化。但微软并没有利用这一点。这不是完全水晶,为什么他们没有,但肯定与他们的1-800支持电话号码。代码优化始终是代码生成器中风险最大的部分,而现有的抖动中的bug一直都是优化错误。总有一天这种情况可能会改变,这并不是不可想象的。

当您可以利用.NET本地的优势时,您就会领先。它使用C++编译器的后端提前生成代码.但目前,当然,在未来相当长的一段时间里,它只支持打包应用程序。通过Windows商店交付的那种,您必须以Store、Phone或Universal为目标,并使用Store作为部署工具。这个包对于使.NET本机工作非常重要,只有这样它才能看到需要翻译的代码。而且它仍然需要帮助才能使它正确,反射是一个很难解决的问题,这也是你把它放在你的机器上的原因。请注意,对于NGen来说不存在同样的问题,它仍然依赖于抖动来及时获得一些代码抖动。比如反射目标代码和泛型。总有一天这种情况可能会改变,这并不是不可想象的。

如前所述,NGen代码稍微慢一些。因此,如果您不关心暖启动延迟,那么您就不想使用NGen。

最后但并非最不重要的一点是,RyuJIT生成的代码并不比它的前身更快。在优化方面已经做了相当不错的工作。太正派了。RyuJIT项目是为了修复遗留x64抖动中的问题而启动的,这种抖动在代码库中是非常基本的,只有通过大幅度重写才能解决。优化是其中之一,它没有上限的时间花在它上。在大的方法上给它很不合理的延迟时间。因此,如果您想挤出最后一盎司,那么故意禁用RyuJIT,使其回到遗留的x64抖动,这是您应该尝试的。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33647502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档