是否有可能使用分支prediction提示在C#中?有可能、分支、提示、prediction

由网友(我姓李无人理i)分享简介:例如,我知道它被定义为海湾合作委员会,并在Linux内核中使用的:#定义可能(X)__builtin_expect((X),1)的#define不大可能(x)的__builtin_expect((X),0)如果这样的事是可能在C#中,是手动重新排序的最佳替代if语句,将最有可能的情况下,第一个?是否有任何其他方式基于...

例如,我知道它被定义为海湾合作委员会,并在Linux内核中使用的:

 #定义可能(X)__builtin_expect((X),1)
的#define不大可能(x)的__builtin_expect((X),0)
 

如果这样的事是可能在C#中,是手动重新排序的最佳替代if语句,将最有可能的情况下,第一个?是否有任何其他方式基于这种外部知识的?

优化 安信策略 美股调整不改A股震荡上行趋势 看好国内大循环主线

在一个相关的说明,CLR知道如何识别后卫条款,并假定另一个支路将采取,使这种优化不恰当的防范clases使用,是否正确?

(请注意,我意识到这可能是一个微型的优化,我只是为学术目的,有兴趣的。)

解决方案

简短的回答:没有

再回应:你没的真正的需要在大多数情况下。您的可以的改变逻辑的语句给予提示。这是容易做到与性能的工具,像一个建立在更高(更贵)版本的Visual Studio,因为你可以捕捉到错误predicted分行柜台。我意识到这是学术的目的,但它是很好的知道,JITer是的非常的善于优化你的code为您服务。为

为例(通过C#采取pretty的从 CLR多少逐字)

这code:

 公共静态无效的主要(){
    的Int32 [] =一个新的Int32 [5];
    对于(的Int32指数= 0;指数<则为a.length;指数++){
        //做一些事情了[索引]
    }
}
 

看起来可能是低效的,因为则为a.length 是一个属性,因为我们知道在C#中,属性实际上是一组的两个方法( get_Length set_Length 在这种情况下)。然而,JIT知道,这是一个财产,无论是存储在你的局部变量的长度,或内联的方式,以prevent的开销。

       

...一些开发商低估了能力     JIT编译器和试图在试图帮助JIT写巧code     编译器。但是,你想出任何聪明的企图几乎肯定会产生影响     性能产生不利,让您的code难读,减少其可维护性。

  

除其他事项外,它实际上更进一步并执行边界检查一次的外循环的而不是环,这会降低性能的内部。

我意识到它几乎没有直接与你的问题的事,但我想,我想说明一点的是,微优化,这样真的不帮你多少在C#中,这是因为JIT一般做它更好,因为它恰恰设计用于此。 (有趣的事实,在x86 JIT编译器执行更积极的优化比64对应)

本文解释一些添加在.NET 3.5 SP1,跻身优化他们正在改进矫直分支机构,以提高prediction和缓存位置。

所有这一切都这样说,如果你想读一个伟大的书,进入什么样的编译器生成和CLR的表现,我推荐这本书,我从上面,CLR通过C#引用。

编辑:我要指出,如果这是目前可能在.net中,你会发现无论是在的

阅读全文

相关推荐

最新文章