gpt4 book ai didi

CUDA:停止所有其他线程

转载 作者:行者123 更新时间:2023-12-04 22:53:28 24 4
gpt4 key购买 nike

我有一个问题似乎可以通过列举所有可能的解决方案然后找到最佳解决方案来解决。为了做到这一点,我设计了一种回溯算法,如果找到,它会枚举并存储最佳解决方案。到目前为止它工作正常。

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

所以,我想要以下内容:找到最佳解决方案的线程应该停止所有我程序中运行的 CUDA 线程,从而完成计算。

经过快速搜索,我发现线程只有在同一个 block 中才能进行通信。 (所以我想阻止其他人阻塞线程是不可能的。)

我唯一能想到的方法是我有一个专用标志 optimum_found,在每个内核开始时检查它。如果找到最佳解决方案,此标志将设置为 1,因此所有 future 的线程都知道它们不必工作。但是,如果已经在运行的线程没有在每次迭代时都检查它,那么它们当然不会注意到这个标志。

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

最佳答案

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

无论如何,内核调用通常应该相对较短,因此即使其中一个线程找到了最佳解决方案,让批处理中的其他线程完成也不会对您的性能造成太大影响。

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

关于CUDA:停止所有其他线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735786/

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