我想用 Compiler Optimizations for HyperTreading 写一篇论文。第一步是调查为什么具有超线程(同时多线程)的处理器会导致比没有这种技术的处理器更差的性能。第一步是找到一个在没有超线程的情况下更好的应用程序,这样我就可以在它上面运行一些硬件性能计数器。关于如何或在哪里可以找到的任何建议?
所以,总结一下。我知道超线程的好处在 -10% 到 +30% 之间。我需要一个性能降低 10% 的 C 应用程序。
谢谢。
我想用 Compiler Optimizations for HyperTreading 写一篇论文。第一步是调查为什么具有超线程(同时多线程)的处理器会导致比没有这种技术的处理器更差的性能。第一步是找到一个在没有超线程的情况下更好的应用程序,这样我就可以在它上面运行一些硬件性能计数器。关于如何或在哪里可以找到的任何建议?
所以,总结一下。我知道超线程的好处在 -10% 到 +30% 之间。我需要一个性能降低 10% 的 C 应用程序。
谢谢。
超线程的主要缺点可能是缓存大小的有效减半。每个线程都将填充缓存,因此实际上每个线程都有一半的缓存。
要创建一个使用超线程比没有运行更差的程序,请创建一个单线程程序,该程序执行的任务恰好适合 L1 缓存。然后添加第二个线程,它分担工作量,就像数据“另一端”的工作一样。您会发现性能下降 - 这是因为两个线程现在都必须访问 L2 缓存。
超线程可以显着提高或降低性能。它完全取决于使用。这些 -10%/+30% 的东西都不是——这太荒谬了。
我不熟悉 HT 的编译器优化,也不熟悉 David 指出的 i7 HT 和 P4 之间的区别。但是,您可以期待一些一般行为。
上下文切换非常昂贵。因此,如果您有一个内核并同时在其上运行两个线程,则一个线程与另一个线程来回切换总是会给您带来性能损失。但是,线程并不总是使用内核。例如,如果线程读取或写入内存,它只是等待内存访问完成,不使用内核,通常要超过 100 个周期。还有许多其他情况需要线程像这样停止,例如,I/O 操作、数据依赖等。这里 HT 有帮助,因为它可以发送等待(或阻塞)的线程,并改为执行另一个线程。
因此,你可以认为如果所有线程真的不可能被阻塞,那么上下文切换只会造成开销。想想处理一小组数据的计算受限的应用程序。