最近我一直在做CUDA上的字符串比较工作,我想知道__global__函数在找到我正在寻找的确切字符串时如何返回一个值.
我的意思是,我需要__global__函数,其中包含大量的线程来同时在一个大的字符串池中查找某个字符串,我希望一旦捕获了确切的字符串,__ global__函数就可以停止所有线程并返回回到主要功能,并告诉我"他做到了"!
我正在使用CUDA C.我怎么可能实现这个目标?
通过列举所有可能的解决方案然后找到最佳解决方案,我有一个似乎可以解决的问题.为了做到这一点,我设计了一个回溯算法,如果找到,它会枚举并存储最佳解决方案.它到目前为止工作正常.
现在,我想将此算法移植到CUDA.因此,我创建了一个生成一些不同基本案例的过程.这些基本情况应该在GPU上并行处理.如果其中一个CUDA线程找到了最佳解决方案,那么所有其他线程当然可以停止工作.
所以,我想要以下类型:找到最佳解决方案的线程应该停止我程序的所有正在运行的CUDA线程,从而完成计算.
经过一些快速搜索后,我发现线程只能在同一个块中进行通信.(所以我认为不可能阻止其他人阻止线程.)
我能想到的唯一方法是我有一个专用标志optimum_found,在每个内核的开头检查.如果找到最佳解决方案,则将此标志设置为1,因此所有未来的线程都知道它们不必工作.但是,当然,如果在每次迭代时都没有检查它,那么已经运行的线程就不会注意到这个标志.
那么,是否有可能停止所有剩余的CUDA线程?