为了账号安全,请及时绑定邮箱和手机立即绑定

每个核的最佳线程数

每个核的最佳线程数

慕村9548890 2019-07-13 18:45:08
假设我有一个4核CPU,我想在最短的时间内运行一些进程。这个进程是理想的可并行性,所以我可以在无限多个线程上运行它的块,每个线程花费相同的时间。由于我有4个内核,所以我不期望运行比内核更多的线程,因为单个内核只能在给定的时刻运行单个线程。我对硬件不太了解,所以这只是猜测。在更多的线程上运行可并行进程有好处吗?换句话说,如果我使用4000个线程而不是4个线程运行它,我的进程会更快、更慢,还是在大约相同的时间内完成呢?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我有一个不做I/O的过程,下面是我发现的:

请注意,所有线程都在一个数组上工作,但范围不同(两个线程不访问相同的索引),因此,如果它们在不同的数组上工作,结果可能会有所不同。

这台1.86机器是一台带有SSD的MacBookAir。另一个Mac是带有普通HDD的iMac(我认为是7200 rpm)。Windows机器也有一个7200 rpm的硬盘。

在这个测试中,最优数目等于机器中的核数。


查看完整回答
反对 回复 2019-07-13
?
动漫人物

TA贡献1815条经验 获得超10个赞

我知道这个问题很老,但是从2009年开始事情就有了变化。

现在有两件事要考虑:内核的数量和每个内核内可以运行的线程数。

对于Intel处理器,线程数是由超线程定义的,只有2个线程(如果可用的话)。但是超线程将您的执行时间减少了两个,即使不使用两个线程!(即在两个进程之间共享一个管道-当您有更多进程时,这是很好的,否则就不太好了。更多的核心肯定会更好!)

在其他处理器上,您可能有2个、4个甚至8个线程。因此,如果您有8个内核,每个内核都支持8个线程,那么您可以有64个进程并行运行,而不需要上下文切换。

“没有上下文切换”显然是不正确的,如果您运行的是一个标准的操作系统,它将为您无法控制的所有其他事情进行上下文切换。但这是主要想法。有些操作系统允许您分配处理器,因此只有您的应用程序可以访问/使用所述处理器!

根据我自己的经验,如果您有大量的I/O,多线程是很好的。如果您有很大的内存密集型工作(读源1,读源2,快速计算,写),那么有更多的线程是没有帮助的。同样,这取决于您同时读写的数据数量(例如,如果您使用SSE 4.2和读取256位值,那么所有线程都会停止它们的步骤.换句话说,1线程的实现可能要容易得多,如果不是更快的话,它可能会更快。这将取决于您的进程和内存体系结构,一些高级服务器为不同的核心管理不同的内存范围,因此如果您的数据被正确归档,单独的线程将更快.这就是为什么在某些体系结构上,4个进程的运行速度要快于4个线程的一个进程。)


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 722 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信