gpt4 book ai didi

multithreading - 为什么拥有比核心更快的线程?

转载 作者:行者123 更新时间:2023-12-04 09:56:02 25 4
gpt4 key购买 nike

我已经在多线程版本中实现了PageRank版本。我正在4核Q6600上运行它。当我运行它来创建4个线程时,我得到:

real    6.968s
user 26.020s
sys 0.050s

当我使用128个线程运行时,我得到:
real    0.545s
user 1.330s
sys 0.040s

这对我来说毫无意义。基本算法是求和:
  • 所有线程对输入的子集求和;
  • 同步;
  • 然后,每个线程都会累积其他线程的部分结果;
  • 主线程对所有线程的中间值求和,然后确定是否继续。

  • 分析没有帮助。我不确定哪些数据会有助于理解我的代码-请问一下。

    这真的让我感到困惑。

    最佳答案

    故意创建比处理器更多的线程是一种用于利用“备用周期”的标准技术,在这种情况下,线程被阻塞以等待某些事情(无论是I/O,互斥锁还是其他事情),方法是为处理器提供一些其他有用的工作,以便做。

    如果您的线程正在执行I/O,那么这是提高速度的有力竞争者:由于每个线程都在等待I/O,因此处理器可以运行其他线程,直到它们也对I/O都阻塞为止。准备好第一个线程的数据,等等。

    加快速度的另一个可能原因是您的线程遇到了错误共享。如果您有两个线程在同一高速缓存行(例如,数组的相邻元素)上将数据写入不同的值,则这将阻塞CPU,同时来回传输高速缓存行。通过添加更多线程,可以降低它们在相邻元素上运行的可能性,从而减少错误共享的机会。您可以通过在数据元素上添加额外的填充来轻松地对此进行测试,以使它们各自的大小至少为64个字节(典型的缓存行大小)。如果您的4线程代码加快了速度,那就是问题所在。

    关于multithreading - 为什么拥有比核心更快的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5987376/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com