代码之家  ›  专栏  ›  技术社区  ›  phimuemue

停止所有其他线程

  •  3
  • phimuemue  · 技术社区  · 14 年前

    我有一个问题,通过列举所有可能的解决方案,然后找到最好的,似乎是可以解决的。为了做到这一点,我设计了一个回溯算法,枚举并存储找到的最佳解决方案。到目前为止效果还不错。

    现在,我想把这个算法移植到CUDA。因此,我创建了一个过程来生成一些不同的基本案例。这些基本情况应该在GPU上并行处理。如果其中一个CUDA线程找到了一个最优的解决方案,那么所有其他线程都可以——当然——停止它们的工作。

    所以,我想要的是:找到最佳解决方案的线程应该停止 全部的

    在快速搜索之后,我发现线程只有在同一块中才能通信。(所以我想阻止别人是不可能的。)

    我唯一能想到的方法就是我有一个专用的旗子 optimum_found 1 ,因此所有未来的线程都知道它们不必工作。但当然,已经运行的线程不会注意到这个标志,如果它们不在每次迭代中检查它的话。

    那么,是否有可能停止所有剩余的CUDA线程?

    3 回复  |  直到 8 年前
        1
  •  5
  •   Ian Lee    14 年前

    我认为,如果它是全局内存中的一个内存位置,那么拥有一个专用标志的方法就可以工作。这样,您就可以在每次内核调用开始时检查这个问题。

    也就是说,我相当肯定没有CUDA调用可以杀死其他正在执行的线程。

        2
  •  1
  •   Ljdawson    14 年前

    会降低你的加速。

        3
  •  0
  •   Jasper Kindt    9 年前

    你可能想看看回调。主CPU线程可以确保所有线程以正确的顺序运行。CPU回调线程(读:后处理)可以做额外的开销和调用相关的api函数,以及处理所有的子线程数据。。。此功能在cuda示例中找到,并在cuda功能2上编译。希望这有帮助。