填充所有逻辑核心的进程是否会对性能产生负面影响?

填充所有逻辑核心的进程是否会对性能产生负面影响?

由于超线程,我的 CPU 每个核心有 2 个逻辑处理器。如果我正确理解超线程的前提,它允许每个核心同时为 2 个单独的线程拥有单独的缓存和指令指针,但确实不是允许单个核心同时执行 2 个线程。因此,它基本上只是减轻了线程交换的高开销,这意味着由于运行的线程多于运行它们的核心而产生的负面性能影响减少了。然而我仍然期望会有一些涉及的开销,以及一些例如,在只有 8 个物理核心的系统上运行 16 个线程时,会对性能产生负面影响。

由于我的超线程具有 8 个物理核心,我的系统中运行的软件似乎认为我有 16 个 CPU 核心。有些软件(例如某些构建系统)默认使用所有可用内核以最大化并行化。我知道我可以通过我正在考虑的软件的参数指定线程数。我是否正确地认为超过 8 个线程对性能没有任何好处?我是否正确地认为超过 8 个线程实际上会降低性能?因此,我应该指示程序使用不超过 8 个线程吗?

答案1

这取决于。

一般来说,每个 CPU 线程运行一个软件线程将提供最佳性能。我经常看到每个 CPU 核心运行一个软件线程的速度提高了 10% - 因此,我没有让一个软件线程以 100% 的速度运行,而是有两个软件线程,每个线程都以 55% 的速度运行。

但我也看到了更好的运行性能更少如果多个核心共享相同的缓存,则进程数比 CPU 核心数要多。然而,这种情况非常罕见。

通常您应该使用所有 16 个 CPU 线程,但确定您的系统情况的唯一方法是测量。

相关内容