1

我有一个 .NET Core 应用程序,它启动了 512 个填充 AI 网络的任务。我正在执行扩展测试,并且我在 Azure 中的 2、4、8、16、32 和 64 处理器机器上运行了基准测试。所有基准测试都使用了机器上 100% 的可用 vCPU。

当我尝试在 M128(128 个 vCPU)上运行测试时,测试以 50% 的 CPU 利用率运行。我检查了环境变量,Environment.ProcessorCount告诉我只有 64 个处理器(文档说这是虚拟处理器数)。进一步挖掘,我发现每个“处理器组”的架构限制为 64 个 CPU。这台机器显然有 2 个处理器组,每组 64 个。

这是 .NET Core 中的错误还是 .NET Core 仅限于一个处理器组?

4

2 回答 2

3

根据文档,您可以在单个进程中启用超过 64 个逻辑处理器的执行。您需要在app.config中设置以下内容:

<configuration>
   <runtime>
      <Thread_UseAllCpuGroups enabled="true"/>
      <GCCpuGroup enabled="true"/>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

已验证在带有 AMD EPYC 7713P(总共有 128 个内核)的 Windows 上使用 .net 框架 4.8。以前,它只能在 64 个内核上运行;添加配置后它可以工作。

接下来,我必须解决 IO 瓶颈问题......

于 2021-08-26T06:48:25.263 回答
1

文档Environment.ProcessorCount

如果当前机器包含多个处理器组,则此属性返回可供公共语言运行时 (CLR) 使用的逻辑处理器的数量。

我认为您可能需要运行多个进程(因此需要运行多个 CLR 实例)才能利用第二组。

于 2020-04-09T18:57:30.007 回答