Multithreading 要使用的最佳线程数
好的,我正在解决一个非常平行的问题。 -生成素数(这不是安静的令人尴尬的并行,因为它们是从一个公共源写入的(并从中读取以检查它们是否是一个因子)。 利息: 无论如何,启发我写这篇文章(部分)的原因是我意识到了自己有权 双Xeon E5520 CPU(附带IIRC 16GB ram) 所以我知道每个CPU支持8个活动线程。 但是还有一些后台进程(可能还有其他用户)正在使用其中的一些进程(事实上可能比所有进程都要多)。Multithreading 要使用的最佳线程数,multithreading,cpu,core,Multithreading,Cpu,Core,好的,我正在解决一个非常平行的问题。 -生成素数(这不是安静的令人尴尬的并行,因为它们是从一个公共源写入的(并从中读取以检查它们是否是一个因子)。 利息: 无论如何,启发我写这篇文章(部分)的原因是我意识到了自己有权 双Xeon E5520 CPU(附带IIRC 16GB ram) 所以我知道每个CPU支持8个活动线程。 但是还有一些后台进程(可能还有其他用户)正在使用其中的一些进程(事实上可能比所有进程都要多)。 那么,有多少线程可以让事情更快地进行,这是一个很好的经验法则(我想这条规则需要考
那么,有多少线程可以让事情更快地进行,这是一个很好的经验法则(我想这条规则需要考虑一次可以激活多少线程)没有这样的规则。这取决于很多因素,特别是你的应用程序是否受I/O限制(听起来你的不是)。要做的事情是参数化线程的数量,以便可以从配置文件或命令行中指定它,然后使用这个数字,直到您遇到特定问题和配置的最佳点。如果操作主要受CPU限制(不等待I/O操作)然后一个好的第一个猜测是逻辑CPU核数的1比1。考虑到生成素数主要是CPU限制的,并且您将有16个逻辑核供您使用,那么我将从16个线程开始。做一些测试,看看会发生什么。我预计性能将在16个线程左右达到峰值,但这实际上取决于uch I/O正在存储已生成的素数。您能推荐一个合适的工具来计算我是否达到了最佳点吗?Binery搜索可以,是的。好主意。(我花了30秒来计算出您需要什么)我甚至可以将决定理想线程数的位放在每次程序启动时运行的位置上,使其始终以最佳方式运行。