Tag: 超线程

如何以编程方式确定是在多核,超线程还是多处理器上?

我知道如何获得处理器类型,也许这是唯一的方法,但我实际上正在寻找一种方法来确定应用程序是在多核处理器上运行还是在超线程单核处理器上运行 。 (背景:我的一些客户的托管服务提供商对于他们通过VMWare映像提供的资源非常模糊。这个应用程序应该在多核上运行,但自上次“移动”以来已经看到了有害的性能。通常情况下,一个线程上的多核,一个核心峰值,而不是另一个线程。在这个“多核”上,即使在单线程应用程序上,两个处理器都会出现峰值。)

c#Environment.ProcessorCount并不总是返回完整数量的逻辑处理器,为什么?

在我的机器上,Windows 7 – Enterprise 1 x Intel Xeon E5-1660 0 @ 3.30Ghz(激活超线程的6核/ CPU),Environment.ProcessorCount返回12,这是准确的。 在具有2 x Intel Xeon E5-2697 v3 @ 2.60GHz的Windows Server 2012上(启动了超线程的14核/ CPU(我认为因为任务管理器显示:2个插槽,28个核心,56个逻辑处理器)),Environment.ProcessorCount返回因为2x14x2 = 56,我们认为这是错误的。 为什么在Windows Server 2012 c#方法Environment.ProcessorCount没有返回正确数量的逻辑处理器? 作为附加信息,环境变量如下:NUMBER_OF_PROCESSORS = 28 更新2015-05-26: 在我的另一个问题中有更多关于此相关错误的详细信息/原因: 无法在C#应用程序中为我的线程使用多个处理器组 。 主要是我认为C#只使用一个处理器组。 有什么问题,在我们的服务器上,有2个处理器组,尽管只有56个逻辑处理器。 但是这个惠普客户顾问解释了为什么我们的服务器BIOS配置导致错误的窗口。