首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最新Xeons上的FP密集型超线程性能

最新Xeons上的FP密集型超线程性能
EN

Stack Overflow用户
提问于 2010-07-08 09:07:42
回答 2查看 2.2K关注 0票数 6

我们最近购买了一台双Intel X5650工作站,在Ubuntu10.04下运行浮点密集型模拟。

每个X5650有6个核心,因此总共有12个核心。代码是微不足道的并行,所以我一直在用12个线程运行它,并通过"top“观察到大约"1200%”的处理器利用率。

HyperThreading是在基本输入输出系统中启用的,因此操作系统名义上会看到24个可用内核。如果我将线程数增加到24,top会报告大约2000%的处理器利用率-但是,看起来实际的代码性能并没有提高20/12。

我的问题是- HyperThreading实际上是如何在最新一代的至强上工作的?浮点密集型代码会从每个内核调度多个线程中受益吗?如果工作集与缓存大小相差几倍,或者如果有大量的I/O操作(例如,将模拟输出写入磁盘),答案是否会发生变化?

此外,当启用超线程时,我应该如何从“顶部”解释处理器利用率百分比?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-09 11:55:10

使用HT,操作系统将同时为每个内核调度2个线程。top报告的利用率本质上就是在其采样间隔(通常为1秒)内处于“运行”状态的平均线程数。正在运行的线程可供CPU执行,但可能不会完成太多工作,例如,如果它们主要是由于缓存未命中而停滞。

当线程在真实的I/O上被阻塞时--网络、磁盘等--操作系统会将其从内核中取消调度,并调度其他准备好的线程,因此HT不会起作用。

HT试图从数学执行单元中获得更多的利用率,而实际上并不会使内核中的硬件增加一倍。如果一个线程具有足够的指令级并行性,并且没有太多未命中缓存,那么它将主要填满内核的资源,而HT不会有任何帮助。对于数据不能放入缓存的繁重FP应用程序,HT仍然没有多大帮助,因为两个线程都使用相同的执行单元(SSE数学),并且都需要比整个缓存更多的执行单元--事实上,这很可能会造成伤害,因为它们将竞争缓存和更多的抖动。当然,这取决于您正在做什么以及您的数据访问模式是什么样的。

HT主要帮助具有不规则和不可预测的访问模式的分支代码。对于FP密集型代码,你通常可以在每个内核一个线程的情况下做得更好,并仔细设计你的访问模式(例如,良好的数据阻塞)。

票数 6
EN

Stack Overflow用户

发布于 2015-03-10 21:24:53

我已经开发了一个非常高性能的、令人尴尬的并行代码,它将在尽可能多的可用内核上运行。最初它运行在2核AMD笔记本电脑上,但当我转移到2核+HT英特尔笔记本电脑上时,执行性能的改善微乎其微:新一代CPU的存在,另外两个(HT)内核和670 the更高的CPU时钟根本不会被注意到。当我将代码限制在两个非HT线程时,双核情况下的预期加速突然出现了,我可以轻松呼吸了。

当我将编译器优化级别从3更改为2,最后更改为1时,超线程开始显示出它的潜力。最好的结果是在优化级别1,并且大约比2码非HT情况好50%。

我认为发生的情况是,编写得太好的-optimized代码最大限度地利用了内核,以至于基本上没有额外的可用资源可供第二个线程执行。当然,第二个线程将运行,但当两个线程需要相同的资源时,它们将发生冲突。由于较高的优化级别,他们将更频繁地执行此操作。

由于具有较少优化或密集的代码,线程有机会在更大程度上“交错”其对内核资源的访问。这导致两个线程分别以最高优化代码在一个内核上运行的75%左右的速度运行。总而言之,在两个线程上优化较少的代码产生的吞吐量是在一个线程上优化最多的代码的1.5倍。

我考虑了编写代码的想法,看看可以实现什么级别的核心资源“交错”,我假设这样的线程将在一个CPU执行管道中花费一半的内部循环执行时间,在另一个CPU执行管道中花费一半的时间。预期的结果是,一个人将在另一半之后执行半个内部循环,以实现最佳的资源“交错”。

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

https://stackoverflow.com/questions/3200033

复制
相关文章

相似问题

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