问题标签 [ryujit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
192 浏览

c# - 我在哪里可以获得有关 RyuJIT 编译器更改的信息?

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

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

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

0 投票
2 回答
660 浏览

c# - 包装原始值类型的结构是 C# 中的零成本抽象吗?

有时我想为原始双打添加更多类型安全。经常出现的一个想法是在类型中添加单元信息。例如,

在像上面这样只有一个字段的情况下,JIT 是否能够在所有情况下优化掉这个抽象?与使用未包装双精度的类似代码相比,哪些情况(如果有)会导致生成额外的机器指令?

任何提及过早优化的内容都将被否决。我有兴趣了解基本事实。

编辑:为了缩小问题的范围,这里有几个特别感兴趣的场景......

这些是我能想到的一些事情。当然,像@EricLippert 这样优秀的语言设计师可能会想到更多的场景。所以,即使这些典型的用例是零成本的,我仍然认为最好知道 JIT 是否不将一个结构保持一个值和未包装的值视为等效的任何情况,而不列出每个可能的代码片段作为它自己的问题

0 投票
1 回答
300 浏览

c# - RyuJIT C# 错误的求和结果与 /optimize

我有这段代码:

如果我在调试模式下构建我的应用程序,一切正常,test index pre打印 12 并test index post打印 14。在Optimize code未选中的发布模式下相同。如果我使用Optimize code检查test index post打印 18 而不是 14进行测试。
如果我替换index += ethType.Length;index += 2;. 似乎只有index++;index++;在工作。
我在一个空的应用程序中尝试了这段代码,总和还可以。
应用程序是多线程的,但这里没有并发。
来自 DLL 的反编译代码似乎没问题。
任何想法为什么会发生这种情况?

编辑:仅在为 x64 编译应用程序时发生。x86 没问题。
编辑 3:构建环境的一些信息:
visual studio 15.0.0-RTW+26228.4
框架 4.7.02053
可以在框架 4.6.2 和 4.7 上触发此问题。其他框架未经过测试。
编辑 5:新的、更小的示例项目。不需要依赖项。
编辑 6:这里测试项目的反汇编。(这里太长了,不能发)

0 投票
0 回答
63 浏览

c# - Vector.Dot 无法正常工作

我正在尝试使用System.Numeric.Vectorsnuget 包(版本 4.4.0),但以下代码无法按预期工作:

代码在 x64 Release .NET 4.7 版本中引发异常,并带有消息:Expected 168 actual -458674576 (cnt: 4, acc:True)

Vector 没有硬件加速的所有其他构建都会给出正确的结果。

这是 RyuJIT 中的错误还是我做错了什么?


编辑

替换为 后intfloat代码给出了正确的结果。此代码是否无法达到int预期结果?

0 投票
1 回答
532 浏览

c# - 为什么 Mono 运行简单方法的速度较慢,而 RyuJIT 运行速度明显更快?

出于好奇,我创建了一个简单的基准,但无法解释结果。

作为基准数据,我准备了一个带有一些随机值的结构数组。准备阶段没有基准:

基本上,我想比较这两种钳位实现:

这是我的基准方法:

我正在使用BenchmarkDotNet 0.10.12 版进行两项工作:

这些是我得到的结果:

我可以接受 Mono 在这里一般来说有点慢。但我不明白的是:

为什么 Mono 运行该Direct方法的速度Extension记住Direct使用非常简单的比较方法而Extension使用带有其他方法调用的方法要慢?

RyuJIT 在这里展示了简单方法的 4 倍优势。

谁能解释一下?