关闭超线程时的最佳线程数

时间:2016-04-12 12:29:15

标签: multithreading context-switch hyperthreading cpu-cores

我有一个问题,我试图找到答案,但从我发现的所有信息中更加困惑 - 不幸的是,无法获得明确的答案

所以,让我们说我有一台关于超线程的计算机关闭。

我在我编写的程序中应该使用的最佳线程数是多少?

据我所知,如果我的程序不是100%CPU绑定(处理IO),那么最佳线程数将超过每个核心一个线程 - 因为我将有多个线程在等待,并且有更多(对于这类程序来说,由于上下文切换开销不会太多。

但是,如果我的程序是100%CPU绑定 - 每个核心一个线程是最佳的? 我因为拥有更多线程而感到困惑,这意味着可能会为每个线程获得更大的切片时间 - 这可以提高性能。

谢谢!

1 个答案:

答案 0 :(得分:0)

对于没有超线程的纯粹CPU绑定负载,答案总是每个核心1个线程。

在HT打开的情况下,每个HT核心可能少于一个线程,因为线程争用同一个缓存。但通常,即使每个HT核心一个线程也是最好的。

使用IO工作负载会更加复杂,但这不适用于此。

  

因为拥有更多线程,意味着每个线程可能会获得更大的切片时间

不确定我是否遵循了推理。操作系统将以循环方式近似地将时间片分发给线程。时间片是4-40ms,它们的大小不会根据线程数而改变。

理想情况下,当线程数完全正确时,没有上下文切换可言。您添加的线程越多,就会有更多的上下文切换。

相关问题