超线程 - 我可以通过哪个测试来检查它是启用还是禁用?

时间:2013-09-18 04:04:38

标签: c++ c linux hyperthreading

是否有任何简单的性能测试可以检测HT是否启用? 例如,当最大CPU数量受Linux内核(NR_CPUS)限制且无法访问BIOS时,我需要它。

那么你可以建议任何代码检测是否启用HT?

我浏览了herehere,但这不是答案。 感谢名单。

3 个答案:

答案 0 :(得分:2)

还有另一种方式 - / sys / file系统,它应该比/ proc更有序。 / proc / cpuinfo在内核版本之间有所不同;

cat / sys / devices / system / cpu / cpu0 / topology / thread_siblings

为您提供与核心cpu0一起运行的硬件线程列表。

https://www.kernel.org/doc/Documentation/cputopology.txt

4) /sys/devices/system/cpu/cpuX/topology/thread_siblings:

    internal kernel map of cpuX's hardware threads within the same
    core as cpuX

答案 1 :(得分:1)

在Linux上我认为你可以阅读/proc/cpuinfo,但之后你必须考虑一下我们是否有多核cpu或HT启用的cpu等。

首先,flags会为您提供支持的功能, ht 会显示超线程支持。

然后你必须检查每个CPU上的兄弟计数是否匹配核心数,所以查找cpu id,并从那里扣除。 (因此,如果兄弟计数与核心数匹配 - >没有HT) 可以在此处找到更多信息:http://richweb.com/cpu_info

答案 2 :(得分:0)

检查标志会给你一个明确的答案,而性能测试(特别是如果以编程方式检查结果)会有一些不确定性。我们将测试的超线程(HT)签名的性能特征是什么?当线程执行不同的工作时,HT提供了更好的性能,其中基于微体系结构定义了不同的工作。相比之下,由于代码在每个内核上执行,因此单独的内核几乎没有性能相关性(某些因素仍然存在,如内存带宽或共享缓存)。

您可以测试多种组合;我将在这里勾勒出一个可能的解决方案。假设系统至少有两个核心也可以启用HT。这提供了4个逻辑处理器(LP),可以在其上调度线程。制作一个可以强调一个核心资源的单线程程序。现在,复制那个工作,以便我们有两个可以独立运行的线程。然后,为了测试性能,将线程的调度亲和性设置为系统中不同的LP对。然后测量在不同对上运行的性能。 HT对将提供与配对单独核心不同的性能。

在编写性能测试时,您通常会关注测量性能。测量机制是否具有必要的粒度?您正在测试的变量(HT与核心)是否发生变化,但没有其他变量?例如,每次测试前缓存是否处于相同状态?或者,某些核心是否共享缓存,因此在测试中将它们配对会产生与其他对不同的性能?现在,如果你做了所有这些,那么你应该观察不同的表现结果,这取决于你安排工作的那对LP。