首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一个简短的C程序,它在有HyperThreading的处理器上比在没有它的处理器上运行得慢

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

Stack Overflow用户
提问于 2011-03-04 23:24:45
回答 2查看 157关注 0票数 2

我想写一篇关于HyperTreading编译器优化的论文。第一步是调查为什么带有HyperThreading(同步多线程)的处理器会导致比没有这项技术的处理器更差的性能。第一步是找到一个没有HyperThreading的更好的应用程序,这样我就可以在它上面运行一些硬件性能计数器。有什么建议吗?我可以在哪里找到它?

所以,总结一下。我知道HyperThreading收益在-10%到+30%之间。我需要一个性能降低10%的C应用程序。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-04-27 18:50:31

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

要创建一个使用超线程比不使用超线程运行得更差的程序,请创建一个单线程程序,该程序执行恰好适合L1缓存的任务。然后添加第二个线程,它分担工作负载,可以说是从数据的“另一端”工作。你会发现性能下降到最低点--这是因为现在两个线程都必须访问L2缓存。

超线程可以显著提高或降低性能。它完全依赖于使用。所有这些-10%/+30%的东西-都不是荒谬的。

票数 2
EN

Stack Overflow用户

发布于 2011-03-05 00:15:47

我不熟悉HT的编译器优化,也不熟悉i7 HT和P4之间的区别。但是,您可以期待一些常规行为。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5195665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档