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

C++ 超线程-通过哪个测试可以检查它是启用还是禁用的?,c++,c,linux,hyperthreading,C++,C,Linux,Hyperthreading,是否有任何简单的性能测试来检测HT是否启用? 例如,当最大CPU数量受linux内核(NR_CPU)限制且无法访问BIOS时,我需要它 那么,您能建议任何代码来检测是否启用了HT吗 我瞥了一眼,但不是答案。 Thanx.在Linux上,我认为您可以阅读/proc/cpuinfo,但在这之后,您必须考虑一下我们是否有多核cpu,或是支持HT的cpu等等 首先,标志将为您提供受支持的功能,ht将指示超读支持 然后您必须检查每个CPU上的同级计数是否与核心计数相匹配,因此查找CPU id,并从中扣除。

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

那么,您能建议任何代码来检测是否启用了HT吗

我瞥了一眼,但不是答案。
Thanx.

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

首先,
标志将为您提供受支持的功能,ht将指示超读支持

然后您必须检查每个CPU上的同级计数是否与核心计数相匹配,因此查找CPU id,并从中扣除。(因此,如果兄弟计数与核心计数相匹配->无HT)
更多信息可以在这里找到:

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

首先,
标志将为您提供受支持的功能,ht将指示超读支持

然后您必须检查每个CPU上的同级计数是否与核心计数相匹配,因此查找CPU id,并从中扣除。(因此,如果兄弟计数与核心计数相匹配->无HT)
更多信息可以在这里找到:

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

你可以测试各种各样的组合;我将在此列出一个可能的解决方案。假设系统至少有两个内核也可能启用了HT。这提供了4个逻辑处理器(LP),可以在其上调度线程。精心设计一个单线程程序,它可以增加一个核心的资源。现在,重复这项工作,这样我们将有两个线程可以独立运行。然后,为了测试性能,将线程的调度关联设置为系统中不同的LPs对。然后测量在不同对上运行的性能。HT对的性能与单独的核对不同


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

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

你可以测试各种各样的组合;我将在此列出一个可能的解决方案。假设系统至少有两个内核也可能启用了HT。这提供了4个逻辑处理器(LP),可以在其上调度线程。精心设计一个单线程程序,它可以增加一个核心的资源。现在,重复这项工作,这样我们将有两个线程可以独立运行。然后,为了测试性能,将线程的调度关联设置为系统中不同的LPs对。然后测量在不同对上运行的性能。HT对的性能与单独的核对不同


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

还有另一种方法,/sys/文件系统,它应该比/proc更有序。 /proc/cpuinfo因内核版本而异

cat/sys/devices/system/cpu/cpu0/topology/thread\u同级

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


还有另一种方法,/sys/文件系统,它应该比/proc更有序。 /proc/cpuinfo因内核版本而异

cat/sys/devices/system/cpu/cpu0/topology/thread\u同级

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


好啊我想知道答案。但我对任何旗帜都不感兴趣。我需要测试哪个测试可以显示启用HT和禁用HT的系统之间的差异。不是任何读取标志的程序,而是执行矩阵乘法或类似操作的程序。好的。我想知道答案。但我不知道
4) /sys/devices/system/cpu/cpuX/topology/thread_siblings:

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