标签: jit

JIT编译器与离线编译器

是否存在JIT编译器比其他编译器(如C++)更快的情况?

您认为将来JIT编译器只会看到次要的优化,功能但是会遵循类似的性能,还是会有突破性的优势使其无限优于其他编译器?

看起来多核心范式有一些希望,但它不是普遍的魔力.

任何见解?

.net c# c++ compiler-construction jit

37
推荐指数
3
解决办法
7952
查看次数

Windows Phone 7和本机C++/CLI

微软最近发布了新的Phone 7平台的工具和文档,让那些拥有大型C++代码库的人(比如我)感到沮丧,不再支持本机开发了.虽然我发现有关这一决定被推翻的猜测,但我对此表示怀疑.所以我想通过调整它在C++/CLI下进行编译来使Phone 7可用的代码库是多么可行.当然用户界面部件无法移植,但我不确定其余部分.有人有类似的经历吗?我不是在谈论那些做重度低级的东西的代码 - 但是经常使用模板和智能指针.

jit arm native c++-cli windows-phone-7

37
推荐指数
3
解决办法
2万
查看次数

将RIT与R一起使用可能存在的缺点?

我最近发现可以使用编译器包使用JIT(及时)使用R编译(我在最近的博客文章中总结了我对此主题的发现).

我被问到的一个问题是:

有任何陷阱吗?这听起来好得令人难以置信,只需输入一行代码即可.

环顾四周后,我发现一个可能的问题与JIT的"启动"时间有关.但是在使用JIT时还有其他问题需要注意吗?

我想与R的环境架构有一些限制,但我想不出一个简单的问题,我的头脑问题,任何建议或危险信号将有很大的帮助?

compiler-construction performance jit r

36
推荐指数
2
解决办法
3872
查看次数

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
查看次数

即时编译器和解释器之间有什么区别?

Just-in-Time-Compiler和Interpreter之间有什么区别,.NET和Java JIT编译器之间有区别吗?

.net java compiler-construction interpreter jit

34
推荐指数
5
解决办法
2万
查看次数

潜在的.NET x86 JIT问题?

在发布模式(或启用优化的调试)中构建时,以下代码的行为会有所不同,并且在附加Visual Studio调试器的情况下运行.

如果使用x86 JITter,它似乎也只能复制.我在x86机器上测试了这个,并在x64机器上运行WOW64(通过将Platform目标设置为x86).

我只用.NET 4.0试过这个.

在Release I中在调试器外部运行时,请参阅:

Value is 4
Run Code Online (Sandbox Code Playgroud)

当在调试器内运行e.Value.Length时,WriteLine调用的部分抛出NullReferenceException,这是我预期会发生的.

代码:

namespace Test
{
    class UsingReleasable<T>
    {
        public UsingReleasable(T obj)
        {
            m_obj = obj;
        }

        public T Release()
        {
            T tmp = m_obj;
            m_obj = default(T);
            return tmp;
        }

        public T Value
        {
            get { return m_obj; }
        }

        T m_obj;
    }

    class Program
    {
        static void Main(string[] args)
        {
            var e = new UsingReleasable<string>("test");
            e.Release();
            System.Console.WriteLine("Value is …
Run Code Online (Sandbox Code Playgroud)

c# jit c#-4.0

34
推荐指数
1
解决办法
653
查看次数

为什么JIT订单会影响性能?

为什么.NET 4.0中的C#方法即时编译的顺序会影响它们执行的速度?例如,考虑两种等效方法:

public static void SingleLineTest()
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    int count = 0;
    for (uint i = 0; i < 1000000000; ++i) {
        count += i % 16 == 0 ? 1 : 0;
    }
    stopwatch.Stop();
    Console.WriteLine("Single-line test --> Count: {0}, Time: {1}", count, stopwatch.ElapsedMilliseconds);
}

public static void MultiLineTest()
{
    Stopwatch stopwatch = new Stopwatch();
    stopwatch.Start();
    int count = 0;
    for (uint i = 0; i < 1000000000; ++i) {
        var isMultipleOf16 = i % …
Run Code Online (Sandbox Code Playgroud)

.net c# compiler-construction performance jit

34
推荐指数
1
解决办法
1481
查看次数

JIT编译器做什么?

我只是在观看Google IO视频,他们谈到了他们在android中包含的JIT编译器.由于JIT编译器,他们展示了性能改进的演示.我想知道JIT编译器究竟做了什么,想要听取不同的人的意见.

那么,JIT编译器的职责是什么?

compiler-construction jit

33
推荐指数
3
解决办法
8728
查看次数

为什么用JIT编译器(就应用程序性能而言)难以击败AOT编译器?

我认为JIT编译器最终将在编译代码的性能方面击败AOT编译器,因为JIT具有固有的优势(可以使用仅在运行时可用的信息).一个论点是AOT编译器可以花更多时间编译代码,但服务器VM也可能花费大量时间.

我知道JIT确实在某些情况下击败了AOT编译器,但在大多数情况下它们似乎仍然落后.

所以我的问题是,阻止JIT编译器击败AOT编译器的具体而棘手的问题是什么?

编辑:
一些常见的论点:

  • AOT编译器可以花更多时间进行高级优化- >如果您运行的服务器虚拟机数天,您可以花费相同的时间,如果不是更长的话.
  • 字节代码解释有成本- >大多数JIT编译器最近都会缓存本地机器指令.

另一个编辑:
有关具体示例,请参阅此文章:改进Swing性能:JIT与AOT编译.从我从本文中可以收集的内容来看,作者基本上说当没有热点时,运行时信息的优势会降低,因此没有JIT开销的AOT就会获胜.但是40%?这似乎没有多大意义.仅仅是因为这种情况没有调整被比较的JIT编译器吗?还是更基本的东西?

compiler-construction performance jit vm-implementation

33
推荐指数
1
解决办法
1万
查看次数

无用的测试指令?

我得到了下面的汇编列表作为我的java程序的JIT编译的结果.

mov    0x14(%rsp),%r10d
inc    %r10d              

mov    0x1c(%rsp),%r8d
inc    %r8d               

test   %eax,(%r11)         ; <--- this instruction

mov    (%rsp),%r9
mov    0x40(%rsp),%r14d
mov    0x18(%rsp),%r11d
mov    %ebp,%r13d
mov    0x8(%rsp),%rbx
mov    0x20(%rsp),%rbp
mov    0x10(%rsp),%ecx
mov    0x28(%rsp),%rax    

movzbl 0x18(%r9),%edi     
movslq %r8d,%rsi          

cmp    0x30(%rsp),%rsi
jge    0x00007fd3d27c4f17 
Run Code Online (Sandbox Code Playgroud)

我对这test条指令的理解在这里没用,因为测试的主要思想是

标志SF,ZF,PF被修改,而AND的结果被丢弃.

这里我们不使用这些结果标志.

这是JIT中的错误还是我错过了什么?如果是,报告的最佳位置在哪里?谢谢!

java assembly jit jvm jvm-hotspot

33
推荐指数
1
解决办法
1194
查看次数