【问题标题】:Where can I get information on changes to the RyuJIT compiler?我在哪里可以获得有关 RyuJIT 编译器更改的信息?
【发布时间】:2017-11-23 14:36:39
【问题描述】:

我有一些用 C# 编写的数学函数和使用 BenchmarkDotNet 的相关性能基准。

今天我安装了 Visual Studio 15.2,根据 BenchmarkDotNet 的输出 (a) 一些数学运算现在比以前快得多(例如 exp 和 tanh 似乎快了好几倍) (b) RyuJIT 版本已更改从 v4.6.1648.0 到 v4.7.2098.0。

我想了解导致这些性能提升的哪些变化。

【问题讨论】:

  • 这与抖动无关,Tanh 和 Exp 不是内在函数。这来自 CLR 使用的 C 运行时库,以前版本中的 msvcr120_clr0400.dll。微软从英特尔购买了该代码,他们不提供源代码,也不告诉他们做什么。您必须拆卸才能看到差异。
  • 谢谢汉斯。看来我获得了 .NET 框架 4.7 作为 Windows 10“创建者”更新的一部分,现在 Roslyn 或 RyuJIT 正在消除他们以前没有的方法调用(即优化没有副作用的方法)。这些是返回值(双精度浮点)的方法,但我没有将结果分配给变量,所以不知道为什么以前没有消除这些。

标签: c# .net jit ryujit


【解决方案1】:

您可以通过关注CoreCLR repo 中的工作来跟踪 RyuJit 的改进。

在过去几年中,CoreCLR 中对 RyuJit 的改进也已传播回完整的 .Net 框架,并适用于在 64 位运行时运行的应用程序。 Core 版本(或有时 CoreCLR 提交)和桌面版本之间存在粗略的对应关系:

  • .Net Core 1.0 ~ .Net Framework 4.6.2
  • .Net Core 1.1 ~ .Net Framework 4.7
  • .Net Core 2.0 ~ .Net Framework 4.7.1
  • CoreCLR 主控,截至 10/2017 ~ .Net Framework 4.7.2
  • .Net Core 2.1 ~ ???

用于 32 位运行时的 .Net Framework 代码生成是由近年来变化不大的旧 jit(又名 JIT32)完成的。

如您所述,.Net Framework 预装在 Windows 中,因此如果您更新操作系统,您也可能会更新 .Net Framework 版本。更新还通过旧操作系统的 Windows 更新提供,因此随着时间的推移,更多的安装将运行最新版本(截至今天为 4.7.2)。

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多