我需要一个简短的C程序,它在使用HyperThreading的处理器上比在没有它的处理器上运行得慢

时间:2011-03-04 15:24:45

标签: hyperthreading

我想写一篇包含用于超线程的编译器优化的论文。第一步是研究为什么具有超线程(同步多线程)的处理器可能导致比没有这种技术的处理器更差的性能。第一步是找到一个没有超线程的更好的应用程序,所以我可以在其上运行一些硬件性能计数器。关于如何或在哪里找到一个的建议?

所以,总结一下。我知道HyperThreading的好处在-10%到+ 30%之间。我需要一个C应用程序,其性能损失为10%。

感谢。

2 个答案:

答案 0 :(得分:2)

超线程的主要缺点可能是缓存大小的有效减半。每个线程都将填充缓存,因此每个线程实际上都有一半的缓存。

要创建一个程序,使用超线程而不是没有超线程运行,创建一个单线程程序,它执行一个适合L1缓存的任务。然后添加第二个线程,它共享工作负载,工作来自数据的“另一端”。你会发现性能下降 - 这是因为两个线程现在都必须访问L2缓存。

超线程可以显着改善或恶化性能。 完全依赖于使用。没有这个-10%/ + 30%的东西 - 这太荒谬了。

答案 1 :(得分:0)

我不熟悉HT的编译器优化,也不熟悉i7 HT和P4之间的差异,正如David指出的那样。但是,您可以期待一些一般行为。

上下文切换非常昂贵。因此,如果您有一个核心并同时运行两个线程,则从另一个线程来回切换一个线程总会给您带来性能损失。但是,线程不会一直使用核心。例如,如果线程读取或写入内存,它只是等待内存访问,而不使用内核,通常超过100个周期。还有许多其他情况,线程需要像这样停止,例如,I / O操作,数据依赖等。这里HT有帮助,因为它可以发出等待(或阻塞)线程,并执行另一个线程。 / p>

因此,您可以认为如果所有线程都不太可能被阻塞,那么上下文切换只会导致开销。考虑一下计算有限的应用程序,它处理一小组数据。