【问题标题】:Optimal Number of threads to use要使用的最佳线程数
【发布时间】:2011-06-09 14:50:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: multithreading cpu core


    【解决方案1】:

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

    【讨论】:

    • 如果我达到了最佳状态,你能推荐一个合适的锻炼工具吗?
    • 二进制搜索可以,是的。好想法。 (我花了 30 秒才弄清楚你说了什么)。我什至可以将确定理想线程数的位设置为在每次 hte 程序启动时运行,以便它始终以最佳方式运行。
    【解决方案2】:

    如果该操作主要受 CPU 限制(不等待 I/O 操作),那么一个好的第一个猜测是与逻辑 CPU 内核的数量是一对一的。考虑到生成素数主要受 CPU 限制,并且您将拥有 16 个逻辑内核供您使用,那么我将 开始 使用 16 个线程。做一些测试,看看会发生什么。我预计性能会在 16 个线程左右达到峰值,但这实际上取决于发生多少 I/O 来存储已生成的素数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      • 2010-10-14
      • 2021-02-05
      相关资源
      最近更新 更多