Tag: ryujit

RyuJIT – 带有ushort和Equals覆盖的错误(64位)

在将32位托管应用程序移植到64位时,我通过结构中的Equals()覆盖观察到了一种奇怪的行为。 你在github找到了一个repro。 要重现该错误,您应该使用“optimize”标志编译库。 这是Release配置的默认设置。 必须在不进行任何优化的情况下编译消耗的TestApp。 首选必须禁用32位才能启动64位应用程序。 请参阅github上的说明! 该库包含一个实现IEquatable接口的结构,该接口使用简单的代码行实现。 public bool Equals(StructWithValue other) { return value.Equals(other.value); } 此代码调用ushort / UInt16类型的Equals方法。 如果使用建议的配置构建解决方案,则32767以上的所有值都将失败。 你在ushort值为32768时调用Equal,而’other’的值也是32768.但是对于32767以上的所有值,Equals()将返回false。 如果您更改方法以使用’==’运算符,代码将起作用。 此外,如果您将类型从struct更改为class,则代码将按预期运行。 public bool Equals(StructWithValue other) { return value == othervalue; } 我认为这是RyuJIT-Compiler中的一个错误。 如果我使用传统的JIT编译器,代码工作正常。 在不同的Windows版本上使用Visual Studio 2015和TargetFramework 4.6.2进行测试。

使用SIMD内在函数时,这些额外的反汇编指令是什么?

我正在测试通过使用RyuJIT的SIMD指令可以得到什么样的加速,我看到一些我不期望的反汇编指令。 我将这段代码基于RyuJIT团队的Kevin Frei的博客文章以及相关post。 这是function: static void AddPointwiseSimd(float[] a, float[] b) { int simdLength = Vector.Count; int i = 0; for (i = 0; i < a.Length – simdLength; i += simdLength) { Vector va = new Vector(a, i); Vector vb = new Vector(b, i); va += vb; va.CopyTo(a, i); } } 我正在查询的反汇编部分将数组值复制到Vector 。 大多数反汇编与Kevin和Sasha的post类似,但我强调了一些额外的指令(以及我的混淆注释),这些指令没有出现在他们的反汇编中: ;// […]

RyuJIT没有充分利用SIMD内在函数

我正在运行一些使用System.Numerics.Vector C#代码,但据我所知,我没有得到SIMD内在函数的全部好处。 我正在使用Visual Studio Community 2015和Update 1,而我的clrjit.dll是v4.6.1063.1。 我正在使用英特尔酷睿i5-3337U处理器 ,它实现了AVX指令集扩展。 因此,我认为,我应该能够在256位寄存器上执行大多数SIMD指令。 例如,反汇编应该包含像vmovups , vmovupd , vaddups等的指令,以及Vector.Count应该返回8, Vector.Count应该是4等等……但那不是我的意思我看到了。 相反,我的反汇编包含诸如movups , movupd , addups等指令……以及以下代码: WriteLine($”{Vector.Count} bytes per operation”); WriteLine($”{Vector.Count} floats per operation”); WriteLine($”{Vector.Count} ints per operation”); WriteLine($”{Vector.Count} doubles per operation”); 生产: 16 bytes per operation 4 floats per operation 4 ints per operation 2 doubles per operation 我哪里错了? […]

什么是新的.Net Native

今天我读了一篇关于MSDN上新的.Net Native的文章。 “使用.NET Native,Windows Store应用程序的启动速度提高了60%,并且内存占用空间更小。我们的第一个版本是开发人员预览版,允许您使用这个新编译器开发和测试应用程序。此.NET预览版提供你用C#的生产力来表现C ++“。 当然,这真的很有趣但是如果.Net Native是一个新的编译器,它提供了良好的性能,那么为什么我们需要去RyuJIT。 什么是这个新的.Net Native? 新的.Net Native和RyuJIT之间的区别是什么,微软发布的编译器也称为Roslyn。 那么Roslyn如何支持这个新的.Net Native。

如何validationryujit是否正在使用我的应用程序?

我已经为.NET RyuJit安装了新的Jit编译器,并按照安装文档中的描述在regedit中设置了.NetFramework中的AltJit = *键。 http://blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx 那么如何validationRyuJit实际上是否正在使用?