首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从没有HyperThreading的计算机中获取核心总数

从没有HyperThreading的计算机中获取核心总数
EN

Stack Overflow用户
提问于 2016-09-01 14:30:05
回答 5查看 46.8K关注 0票数 12

这是一次艰难的考验。

我需要使用一个命令从我的服务器输出核心的确切数量。

我的测试:

  • Windows服务器上的X**:**,有4个处理器(套接字)和2个核心,每个核都没有HT。
  • Windows上的Y**:**有2个处理器(套接字)和6个核心,每个内核都有HT。

GetSystemInfo只给我安装了多少处理器:4个用于X,2个用于Y。

代码语言:javascript
复制
|                | X: 8 cores  | Y: 12 cores |
|                | 4x2 (no HT) | 2x6 (HT)    |
|----------------|-------------|-------------|
| Desired output | 8           | 12          |
| GetSystemInfo  | 4           | 2           | 

%NUMBER_OF_PROCESSORS%是一个很好的方法,但是它考虑到了HT。它告诉我X是8,Y是24 (因为它有HT,所以我需要它来显示12 )。

代码语言:javascript
复制
|                        | X: 8 cores  | Y: 12 cores |
|                        | 4x2 (no HT) | 2x6 (HT)    |
|------------------------|-------------|-------------|
| Desired output         | 8           | 12          |
| GetSystemInfo          | 4           | 2           | 
| %NUMBER_OF_PROCESSORS% | 8           | 24          |

"wmic cpu get NumberOfCores"为每个套接字获取信息。例如:

X:

代码语言:javascript
复制
>wmic cpu get NumberOfCores
NumberOfCores
2
2
2
2

Y:

代码语言:javascript
复制
>wmic cpu get NumberOfCores
NumberOfCores
6
6

含义

代码语言:javascript
复制
|                            | X: 8 cores  | Y: 12 cores |
|                            | 4x2 (no HT) | 2x6 (HT)    |
|----------------------------|-------------|-------------|
| Desired output             | 8           | 12          |
| GetSystemInfo              | 4           | 2           | 
| %NUMBER_OF_PROCESSORS%     | 8           | 24          |
| wmic cpu get NumberOfCores | 2,2,2,2     | 6,6         |

叹一口气。

我希望在CMD中保持简单,但是我正在考虑启动一个Powershell脚本来完成所有的数学和其他工作。

有什么想法吗?

EN

回答 5

Stack Overflow用户

发布于 2018-12-20 14:31:30

建议的命令不能在64个逻辑核的计算机上工作。

(Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors

提供逻辑核的数量(HT核)

票数 16
EN

Stack Overflow用户

发布于 2020-10-27 19:47:35

您可以对所需的属性使用Get-ComputerInfo和scope。

代码语言:javascript
复制
$processor = Get-ComputerInfo -Property CsProcessors
$processor.CsProcessors

这应该会让你觉得

代码语言:javascript
复制
Name                      : Intel(R) Core(TM) i7-6600U CPU @ 2.60GHz
Manufacturer              : GenuineIntel
Description               : Intel64 Family 6 Model 78 Stepping 3
Architecture              : x64
AddressWidth              : 64
DataWidth                 : 64
MaxClockSpeed             : 2808
CurrentClockSpeed         : 2607
NumberOfCores             : 2 <== that one
NumberOfLogicalProcessors : 4 
…
…

然后,只需在结果中查找NumberOfCores即可。

票数 10
EN

Stack Overflow用户

发布于 2017-01-20 05:20:11

如果我理解您对每个服务器的问题,您希望检索一个整数,即物理处理器(核心)的总数。取决于超线程是否可用和启用,这可能是逻辑处理器数量的一半,但您特别希望排除这些。

WMI类的实例表示单个处理器套接字。NumberOfCores属性指示该套接字提供的物理处理器数量。我们可以在PowerShell中使用cmdlet查询这个问题。

代码语言:javascript
复制
Get-CimInstance -ClassName 'Win32_Processor' `
    | Select-Object -Property 'DeviceID', 'Name', 'NumberOfCores'

要为每个NumberOfCores实例添加Win32_Processor属性,我们可以使用cmdlet

代码语言:javascript
复制
Get-CimInstance -ClassName 'Win32_Processor' `
    | Measure-Object -Property 'NumberOfCores' -Sum

在结果对象中,Sum将包含物理核的总数,Count将包含套接字的总数。

请注意,在旧版本的Windows/PowerShell中,您可能需要将cmdlet替换为Get-CimInstance。此外,如果您确实希望获得逻辑(超线程)处理器的计数,则可以用NumberOfLogicalProcessors属性代替NumberOfCores。由于Windows10/Server 2016也有一个NumberOfEnabledCore属性。

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

https://stackoverflow.com/questions/39274324

复制
相关文章

相似问题

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