7

これら 3 つのプラットフォームすべてで、論理プロセッサの数を正確に検出できます。

物理プロセッサ/コアの数を正しく検出できるようにするには、ハイパースレッディングがサポートされており、アクティブである (または必要に応じて有効になっている) かどうかを検出する必要があります。 .

おそらく私は例を提供する必要があります:

ハイパースレッディングが有効になっているクアッド コア Intel CPU には、4 つの物理コアがありますが、8 つの論理プロセッサがあります (ハイパースレッディングにより、さらに 4 つの論理プロセッサが作成されます)。したがって、現在の関数は、目的の 4 ではなく 8 を検出します。

したがって、私の質問は、ハイパースレッディングがサポートされ、有効になっているかどうかを検出する方法があるかどうかです。

4

4 に答える 4

4

CPUID命令(EAXで関数1Hを渡す場合)は、EDXレジスタのビット28でハイパースレッディング機能フラグを返します。マルチコアプロセッサは、個々のコアが1つのスレッドしか実行できない場合でも、ハイパースレッディングが有効になっていると報告していると思います。

また、EBXのビット23〜16で、物理プロセッサごとの論理プロセッサの数を返します。システム上のすべてのプロセッサをヒットするには、各プロセッサに個別にクエリを実行する必要があると思います。

于 2010-05-25T13:30:00.950 に答える
4

Windows 2003 Server および Windows XP SP3 以降では、GetLogicalProcessorInformationシステム コールを使用してこの情報を確認できます。

于 2010-05-25T13:34:59.923 に答える
3

OS X の場合:

#include <sys/sysctl.h>

int physicalCores;
sysctlbyname("hw.physicalcpu", &physicalCores, sizeof(physicalCores), NULL, 0);

詳細については、ヘッダーまたはマンページを参照してください。(「hw.logicalcpu」文字列を使用して、同じ方法で論理 cpu の数を取得できることに注意してください)

于 2010-05-26T15:26:38.083 に答える
3

Linux:

物理 CPU の数:

grep -i "physical id" /proc/cpuinfo | sort -u | wc -l

論理 CPU の数:

grep -i "processor" /proc/cpuinfo | sort -u | wc -l
于 2010-05-25T11:59:47.360 に答える