最佳使用的线程数

时间:2011-06-09 14:50:21

标签: multithreading cpu core

好的,我正在解决一个非常严重的问题。   - 生成素数(因为它们是从共同的源写入(并从中检查是否是一个因素),所以它并不安静,令人尴尬地平行。 感兴趣:http://pastebin.com/sQQLpMgB

无论如何,启发我写这篇文章(部分)的是实现我对this的访问权限 双Xeon E5520 CPU(配备IIRC 16GB内存)

所以我知道每个CPU支持8个活动线程。 但后来有一些后台进程(可能还有其他用户)使用其中的一些(实际上可能更多的是所有这些)。 那么,在他们被头顶阻挡之前,有多少线程可以让事情变得更快,这是一个很好的经验法则。 (我想这个规则需要考虑一次可以激活多少个线程)

2 个答案:

答案 0 :(得分:2)

没有这样的规则。这将取决于许多因素,尤其是您的应用程序是否受I / O限制(听起来与您的不同)。要做的是参数化线程数,以便可以从配置文件或命令行指定它,然后使用这个数字,直到你找到特定问题和配置的最佳位置。

答案 1 :(得分:1)

如果操作主要是CPU绑定(不等待I / O操作),那么首先猜测的是逻辑CPU核心数量的1对1。考虑到生成素数主要是CPU绑定的,并且您将拥有16个逻辑核心,然后我将以16个线程启动。做一些测试,看看会发生什么。我希望性能在16个线程附近达到峰值,但这实际上取决于存储已经生成的素数的I / O量。