我想写一篇关于HyperTreading编译器优化的论文。第一步是调查为什么带有HyperThreading(同步多线程)的处理器会导致比没有这项技术的处理器更差的性能。第一步是找到一个没有HyperThreading的更好的应用程序,这样我就可以在它上面运行一些硬件性能计数器。有什么建议吗?我可以在哪里找到它?
所以,总结一下。我知道HyperThreading收益在-10%到+30%之间。我需要一个性能降低10%的C应用程序。
谢谢。
发布于 2011-04-27 18:50:31
超线程的主要缺点可能是缓存大小的有效减半。每个线程都将填充缓存,因此每个线程实际上都有一半的缓存。
要创建一个使用超线程比不使用超线程运行得更差的程序,请创建一个单线程程序,该程序执行恰好适合L1缓存的任务。然后添加第二个线程,它分担工作负载,可以说是从数据的“另一端”工作。你会发现性能下降到最低点--这是因为现在两个线程都必须访问L2缓存。
超线程可以显著提高或降低性能。它完全依赖于使用。所有这些-10%/+30%的东西-都不是荒谬的。
发布于 2011-03-05 00:15:47
我不熟悉HT的编译器优化,也不熟悉i7 HT和P4之间的区别。但是,您可以期待一些常规行为。
上下文切换是非常昂贵的。因此,如果你有一个核心,同时在它上面运行两个线程,来回切换一个线程总是会给你带来性能损失。然而,线程并不总是使用内核。例如,如果线程读或写内存,它只是等待内存访问完成,而不使用内核,通常超过100个周期。还有许多其他情况下,线程需要像这样停止,例如,I/O操作,数据依赖等。在这里HT有所帮助,因为它可以发送等待(或阻塞)的线程,并执行另一个线程。
因此,您可以认为,如果所有线程都不太可能被阻塞,那么上下文切换只会导致开销。想一想非常受计算限制的应用程序处理一小部分数据。
https://stackoverflow.com/questions/5195665
复制相似问题