2013-03-09 23 views
1

不知道在托管语言中这是否甚至可能,但是是否有可能在存在超线程的情况下实际上使应用程序性能更好?如何从.Net中的超线程技术中获得最大收益

是否有什么特定的东西可以在代码中完成? ,也许一些功能在HT环境中比其他功能运行得更好?我知道要从多线程中受益,所需要的就是产生新线程来执行繁重的cpu任务,但我不确定HT需要什么?

+0

这是一个非常广泛的问题,你最好在程序员.stackexchange.com上提问。 – didierc 2013-03-09 19:08:14

+0

这个问题有点令人困惑;你问是否有一种方法可以优化.NET程序来处理超线程环境(其中有“虚拟”cpus)与其中有许多“真正”CPU的环境?或者你的问题只是“我如何利用多核?”不管内核是真实的还是虚拟的? – 2013-03-09 19:08:54

+0

编辑了答案,删除了一些混淆,希望我删除了足够的可以回复。 @EricLippert – sharp12345 2013-03-09 19:12:20

回答

4

取决于您拥有的实际硬件。阅读Be aware: To Hyper or not to Hyper以获取更多的部门分析。 Slava指出,在HT中,虚拟内核共享缓存,而虚拟核心工作负载可能会破坏“主”内核的缓存,尽管与主内核相比,它最多可以完成20%的工作量,原因是其逐出主要的核心的热点缓存,它会导致比W/O HT 糟糕性能的主要核心来搪塞和整体效果。

但自文章发布以来,很多事情发生了变化,HT帖子Nehalem明显更好。

我知道,从多线程中获益,所有需要的是 产生新的线程来执行繁重CPU任务

这是一个相当幼稚的观点。您必须阅读Rick Vicik articles on high performance windows programs(它们也适用于托管应用程序),并且您必须完全了解CPU Caches and Why You Care

+0

那么你的意思是,在用户线程启动方式优化的HT机上运行时应该做的,因为并行执行发生在物理CPU上的方式比多核CPU上的不同。但是由于没有专门的API存在,是否值得这样做?我知道对于BizTalk和SQL Server MS建议禁用HT并警告在该模式下次优性能,但对于只需要在工作线程中执行某些操作的应用程序,您有什么建议? – 2013-03-09 19:49:35

+2

@marceln:我的建议是:设定一个表现目标。衡量一下你是否达到了你的目标。如果你有,请休息一下,然后去海滩。如果你不这样做,可以找出一个分析器并优化最慢的事情。由于涉及超线程处理器上的缓存局部性的细微问题,您的工作线程速度很慢的几率很低。你能描述一下你的工作线程正在做什么吗? – 2013-03-09 20:00:16

+0

@EricLippert:我同意并且我喜欢认为这是每个优秀开发人员在这种情况下所采取行动的过程。但是,知道底层会发生什么并不会让人伤心(为此,感谢Remus)。 – 2013-03-09 20:05:03