我在PC上运行了一些相当密集型的内容,并注意我的CPU使用情况看起来很奇怪。我的PC是四核i7-870,据说具有八个虚拟内核。
我正在使用.NET 4中的任务并行库,因此希望所有核心都可以很好地使用,但是正在从Process Monitor中获取此类信息:

CPU usage

芯6和8几乎没有被触摸,除了短暂的爆发外,也没有4个。
这是我应该期望的吗?

有帮助吗?

解决方案

在大多数情况下,是的,我认为这看起来很合理。请记住,超线程真的只是 假货 两个核心。每个物理核心都有两个前端,因此可以并行读取两个指令流。但是他们仍然共享相同的执行单元。因此,当一个HT核心忙碌时,执行单元被拿走,因此其“双胞胎”核心将无法完成很少的工作。

这似乎是您在前两个核心上看到的(特别是第二个使它非常明显)

除此之外,您几乎永远无法获得完美的CPU利用率。有时,核心只需要拖延等待内存。有时,它正在执行一项昂贵的非剥离指令,从而有效地阻止了该物理核心上的执行单元,也许是数十个甚至数百个周期。

有时,指示之间的依赖项可能意味着您不 一个或多个内核要执行的任何内容。

除此之外,您会看到8个图,只有4个核心,所以 是的,当然超细读正在工作. ;)

其他提示

简而言之

  1. 是的(当然)
  2. 个人资料
  3. YMMV-超线程不是多级的,因此很大程度上取决于指令负载和缓存饱和等的类型。对您的代码一无所知(实际上是C#,实际上是C#,您可能会寻找“小对象”的集合可以制成直系统。 结构 (通用 List<> 还将在内部使用数组并对结构元素类型进行优化)

$0.02

这完全取决于您的算法实现。 TPL将根据算法中的数据依赖性使用适当数量的内核

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top