标签: ryujit

RyuJit产生不正确的结果

在最近升级到.net 4.6之后,我们发现了一个RyuJit产生错误结果的错误,我们现在可以通过在app.config中添加useLegacyJit enabled ="true"来解决这个问题.

如何调试以下生成的机器代码?

我在VS 2015 RTM中创建了一个新的控制台项目,设置为Release,Any CPU,未经检查的Prefer 32 bit,带有和不带调试器的运行产生相同的结果.

using System;
using System.Runtime.CompilerServices;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Calculate());
            Console.WriteLine(Calculate());

            Console.ReadLine();
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public static Value Calculate()
        {
            bool? _0 = (bool?)null;
            bool? _1 = (bool?)true;
            if (!Value.IsPresent<bool>(_1))
            {
                return default(Value);
            }

            bool? result = null;
            result = (_1.Value ? new bool?(false) : result);
            if (_0.HasValue && _0.Value)
            {
            }
            return new Value(result);
        }

        public struct Value
        {
            bool? _value;

            public Value(bool? …
Run Code Online (Sandbox Code Playgroud)

c# jit ryujit c#-6.0 .net-4.6

35
推荐指数
1
解决办法
2582
查看次数

什么是新的.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.

.net c# .net-framework-version roslyn ryujit

28
推荐指数
1
解决办法
7732
查看次数

包装System.Numerics.VectorX代价昂贵 - 为什么?

TL; DR:为什么包装System.Numerics.Vectors类型很昂贵,有什么我可以做的吗?

考虑以下代码:

[MethodImpl(MethodImplOptions.NoInlining)]
private static long GetIt(long a, long b)
{
    var x = AddThem(a, b);
    return x;
}

private static long AddThem(long a, long b)
{
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

这将JIT转换为(x64):

00007FFDA3F94500  lea         rax,[rcx+rdx]  
00007FFDA3F94504  ret  
Run Code Online (Sandbox Code Playgroud)

和x86:

00EB2E20  push        ebp  
00EB2E21  mov         ebp,esp  
00EB2E23  mov         eax,dword ptr [ebp+10h]  
00EB2E26  mov         edx,dword ptr [ebp+14h]  
00EB2E29  add         eax,dword ptr [ebp+8]  
00EB2E2C  adc         edx,dword ptr [ebp+0Ch]  
00EB2E2F  pop         ebp  
00EB2E30  ret         10h  
Run Code Online (Sandbox Code Playgroud)

现在,如果我将它包装在一个结构中,例如

public struct SomeWrapper
{
    public long …
Run Code Online (Sandbox Code Playgroud)

c# simd ryujit

25
推荐指数
1
解决办法
511
查看次数

RyuJIT和Roslyn有什么区别?

据我所知,RyuJIT比JIT更快.但它是.NET 4.6的新标准还是Roslyn?

或者,当您需要在编译过程中公开API时,是否使用了Roslyn?

我对他们的目的和他们将要找到的框架感到困惑.有人可以解释这些差异,当你想要一个超过另一个时,请?

.net roslyn ryujit

18
推荐指数
3
解决办法
5481
查看次数

如何验证ryujit是否正在使用我的应用程序?

我已经为.NET RyuJit安装了新的Jit编译器,并按照安装文档中的描述在regedit中设置了.NetFramework中的AltJit =*键. http://blogs.msdn.com/b/dotnet/archive/2013/09/30/ryujit-the-next-generation-jit-compiler.aspx

那么如何验证RyuJit实际上是否正在使用?

c# jit ryujit

16
推荐指数
2
解决办法
2482
查看次数

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

我正在运行一些使用的C#代码,System.Numerics.Vector<T>但据我所知,我没有得到SIMD内在函数的全部好处.我正在使用Visual Studio Community 2015和Update 1,而我的clrjit.dll是v4.6.1063.1.

我正在使用英特尔酷睿i5-3337U处理器,它实现了AVX指令集扩展.因此,我想,我应该能够在256位寄存器上执行大多数SIMD指令.例如,拆卸中应包含的指令vmovups,vmovupd,vaddups,等...,并且Vector<float>.Count应该返回8,Vector<double>.Count应该是4,等等......但是,这不是我所看到的.

相反,我的拆卸包含指令等movups,movupd,addups等...以下代码:

WriteLine($"{Vector<byte>.Count} bytes per operation");
WriteLine($"{Vector<float>.Count} floats per operation");
WriteLine($"{Vector<int>.Count} ints per operation");
WriteLine($"{Vector<double>.Count} doubles per operation");
Run Code Online (Sandbox Code Playgroud)

生产:

16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation
Run Code Online (Sandbox Code Playgroud)

我哪里错了?要查看所有项目设置等,可在此处获得该项目.

c# sse simd avx ryujit

15
推荐指数
1
解决办法
1428
查看次数

在Visual Studio 2015 RC中启用RyuJIT

安装Visual Studio 2015 RC1后,我加载了一个旧的ASP.NET项目,并将.NET版本更改为4.6.该项目工作正常,但网站仍然像往常一样慢.我期待着RyuJIT的表现,但显然不是.

我已经看过这个关于RyuJIT的帖子,我看不到RyuJIT的任何痕迹与其中描述的任何方法.

空控制台项目也会出现同样的问题.我无法在输出窗口,模块窗口或运行的Windows任务中看到Ryujit.

因此,无法检测到RyuJIT,因为它曾经在之前的预览中,或者它没有运行.无论哪种方式,我都被困住了.

如何验证RyuJIT是否在VS 2015中运行,如果不运行,我该怎么做才能运行它?

.net ryujit visual-studio-2015

14
推荐指数
2
解决办法
1822
查看次数

我是否需要将我的应用程序定位到.NET 4.6才能利用RyuJIT?

阅读宣布.NET Framework 4.6,似乎暗示RyuJIT仅适用于.NET 4.6.

这是否意味着我需要将我的应用程序重新定位到.NET 4.6以使RyuJIT生效?

.net ryujit .net-4.6

13
推荐指数
1
解决办法
1232
查看次数

在什么条件下.NET JIT编译器执行自动矢量化?

新的RyuJIT编译器是否曾生成向量(SIMD)CPU指令,何时?

附注:System.Numerics命名空间包含允许显式使用Vector操作的类型,这些操作可能会也可能不会生成SIMD指令,具体取决于CPU,CLR版本,JITer版本,是否直接编译为本机代码.这个问题具体是关于何时非矢量代码(例如在C#或F#中)将产生SIMD指令.

.net simd vectorization auto-vectorization ryujit

12
推荐指数
1
解决办法
1104
查看次数

.NET 4.6 RC x64的速度是x86(发布版本)的两倍

Net 4.6 RC x64的速度是x86(发布版本)的两倍:

考虑一下这段代码:

class SpectralNorm
{
    public static void Main(String[] args)
    {
        int n = 5500;
        if (args.Length > 0) n = Int32.Parse(args[0]);

        var spec = new SpectralNorm();
        var watch = Stopwatch.StartNew();
        var res = spec.Approximate(n);

        Console.WriteLine("{0:f9} -- {1}", res, watch.Elapsed.TotalMilliseconds);
    }

    double Approximate(int n)
    {
        // create unit vector
        double[] u = new double[n];
        for (int i = 0; i < n; i++) u[i] = 1;

        // 20 steps of the power method
        double[] v = new …
Run Code Online (Sandbox Code Playgroud)

.net c# ryujit visual-studio-2015

10
推荐指数
1
解决办法
1004
查看次数