65.9K
CodeProject 正在变化。 阅读更多。
Home

计算物理和逻辑处理器数

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.76/5 (11投票s)

2005年2月1日

CPOL

2分钟阅读

viewsIcon

82039

downloadIcon

1162

如何确定计算机上的物理和逻辑处理器数量。

Sample Image

引言

现代 Intel Pentium IV 处理器支持所谓的超线程模式。 通过超线程,一个真实的物理处理器向操作系统呈现为两个独立的逻辑处理器。 超线程技术减少了进程切换开销,提高了整体系统吞吐量。 但是在某些计算密集型应用程序中,这种两个逻辑处理器的假象可能会导致效率损失,如果程序启动两个并行线程,而这两个线程将争用一个物理处理器。 因此,我们必须确定我们的计算机中有多少个物理处理器,以便将并行线程的数量调整为物理处理器的数量。 后面的实用程序显示了我们如何从 C# 程序中做到这一点。

背景

CPU 计数实用程序基于以下 Intel 文档和代码示例

使用代码

CPU 计数实用程序由两部分组成 - 客户端部分和服务器部分。 用 C# 编写的客户端部分调用服务器函数并显示其结果。 服务器部分实际上确定处理器的数量。 它广泛使用 ASM 命令,因此用托管 C++ 编写。

客户端的关键部分是对服务器函数 GetCPUCount 的调用。

int LogicalNum   = 0;  // Number of logical CPU per ONE PHYSICAL CPU
int PhysicalNum  = 0;  // Total number of physical processor
CPUCountStatus HTStatusFlag = 0;

HTStatusFlag = CPUCount.GetCPUCount(ref LogicalNum, ref PhysicalNum);

不要忘记添加命名空间使用语句。

using CPUCounter;

服务器部分实现为一个单独的 DLL,包含类 CPUCount 的静态函数 GetCPUCount

// CPUCount.h

#pragma once

#using   <mscorlib.dll>
using namespace System;

namespace CPUCounter
{
    public __value enum CPUCountStatus
    {
        HT_NOT_CAPABLE,
        HT_ENABLED,
        HT_DISABLED,
        HT_SUPPORTED_NOT_ENABLED,
        HT_CANNOT_DETECT
    };

    public __value class CPUCount
    {
        public:
            static CPUCountStatus GetCPUCount(int __gc* LogicalNum, 
                                              int __gc* PhysicalNum);
    };

    unsigned int  HTSupported();
    unsigned int LogicalProcPerPhysicalProc();
    unsigned int GetAPIC_ID();
    CPUCountStatus DefineCPUCount(int __gc* LogicalNum, 
                                  int __gc* PhysicalNum);

}

函数 GetCPUCount 返回 CPUCountStatus enum 类型的值。 CPUCountStatus 值的含义是

HT_NOT_CAPABLE 此系统中不存在超线程技术。
HT_ENABLED 此系统中启用了超线程技术。
HT_DISABLED 硬件中禁用了超线程技术。
HT_SUPPORTED_NOT_ENABLED 支持超线程技术,但在 BIOS 中禁用。
HT_CANNOT_DETECT 无法检测到超线程技术

要确定超线程的可能性以及计算机中物理和逻辑处理器的数量,只需将文件CPUCounterClient.exeCPUCounter.dll 复制到某个目录并运行 CPUCounterClient.exe

历史

这是 CPU 计数实用程序的第一个版本。

© . All rights reserved.