每个核的最佳线程数

假设我有一个4核CPU,我想在最短的时间内运行一些进程。这个进程是理想的可并行性,所以我可以在无限多个线程上运行它的块,每个线程花费相同的时间。

由于我有4个内核,所以我不期望运行比内核更多的线程,因为单个内核只能在给定的时刻运行单个线程。我对硬件不太了解,所以这只是猜测。

在更多的线程上运行可并行进程有好处吗?换句话说,如果我使用4000个线程而不是4个线程运行它,我的进程会更快、更慢,还是在大约相同的时间内完成呢?


慕村9548890
浏览 724回答 3
3回答

慕桂英546537

我有一个不做I/O的过程,下面是我发现的:请注意,所有线程都在一个数组上工作,但范围不同(两个线程不访问相同的索引),因此,如果它们在不同的数组上工作,结果可能会有所不同。这台1.86机器是一台带有SSD的MacBookAir。另一个Mac是带有普通HDD的iMac(我认为是7200 rpm)。Windows机器也有一个7200 rpm的硬盘。在这个测试中,最优数目等于机器中的核数。

动漫人物

我知道这个问题很老,但是从2009年开始事情就有了变化。现在有两件事要考虑:内核的数量和每个内核内可以运行的线程数。对于Intel处理器,线程数是由超线程定义的,只有2个线程(如果可用的话)。但是超线程将您的执行时间减少了两个,即使不使用两个线程!(即在两个进程之间共享一个管道-当您有更多进程时,这是很好的,否则就不太好了。更多的核心肯定会更好!)在其他处理器上,您可能有2个、4个甚至8个线程。因此,如果您有8个内核,每个内核都支持8个线程,那么您可以有64个进程并行运行,而不需要上下文切换。“没有上下文切换”显然是不正确的,如果您运行的是一个标准的操作系统,它将为您无法控制的所有其他事情进行上下文切换。但这是主要想法。有些操作系统允许您分配处理器,因此只有您的应用程序可以访问/使用所述处理器!根据我自己的经验,如果您有大量的I/O,多线程是很好的。如果您有很大的内存密集型工作(读源1,读源2,快速计算,写),那么有更多的线程是没有帮助的。同样,这取决于您同时读写的数据数量(例如,如果您使用SSE 4.2和读取256位值,那么所有线程都会停止它们的步骤.换句话说,1线程的实现可能要容易得多,如果不是更快的话,它可能会更快。这将取决于您的进程和内存体系结构,一些高级服务器为不同的核心管理不同的内存范围,因此如果您的数据被正确归档,单独的线程将更快.这就是为什么在某些体系结构上,4个进程的运行速度要快于4个线程的一个进程。)
打开App,查看更多内容
随时随地看视频慕课网APP