c# - 超线程有效吗?

标签 c# wpf task-parallel-library process-management hyperthreading

我正在我的 PC 上运行一些相当处理器密集型的东西,并注意到我的 CPU 使用情况看起来很奇怪。我的电脑是四核 i7-870,据说有八个虚拟核心。
我在 .NET 4 中使用任务并行库,因此期望所有核心都能得到很好的利用,但我从进程监视器中获取如下信息:

CPU usage

核心 6 和 8 几乎不会被触及,除了短暂的爆发之外,核心 4 也没有被触及。
这是我应该期待的吗?

最佳答案

在大多数情况下,是的,我认为这看起来很合理。请记住,超线程实际上只是伪造两个核心。每个物理核心都有两个前端,因此它可以并行读取两个指令流。但它们仍然共享相同的执行单元。因此,当一个 HT 核心繁忙时,执行单元就会被占用,因此它的“双”核心将能够完成很少的工作。

这似乎就是您在前两个核心上看到的情况(特别是第二个核心,这一点非常明显)

除此之外,您几乎永远无法获得完美的 CPU 利用率。有时,核心必须停止等待内存。有时它会执行成本高昂的非流水线指令,从而有效地阻塞该物理核心上的执行单元可能数十甚至数百个周期。

有时,指令之间的依赖关系可能仅仅意味着您没有任何东西可供一个或多个内核执行。

除此之外,您会看到 8 个图表,而您只有 4 个核心,所以是的,超线程当然正在工作。 ;)

关于c# - 超线程有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6302508/

相关文章:

c# - PCL 中的 TPL 和监视器

c# - ASP.NET MVC 发布模型始终为空

c# - 如何在 ASP.net Web 应用程序中处理 PageRequestManagerTimeoutException?

.net - 如何将窗口背景绑定(bind)到主题的窗口背景颜色?

wpf - 点击图像但仍然响应鼠标悬停?

c# - 任务取消和任务继续选项

c# - SignalR .NET 客户端在第一次连接尝试时抛出 TimeoutException

c# - 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

wpf:使用 IsReadOnly = true 选择 TextBox 中的文本?

.net - Parallel.For 多久调用一次 localInit?