我正在尝试将一些任务“映射”到 CUDA GPU。有 n 个任务要处理。(见伪代码)
malloc an boolean array flag[n] and initialize it as false.
for each work-group in parallel do
while there are still unfinished tasks do
Do something;
for a few j_1, j_2, .. j_m (j_i<k) do
Wait until task j_i is finished; [ while(flag[j_i]) ; ]
Do Something;
end for
Do something;
Mark task k finished; [ flag[k] = true; ]
end while
end for
出于某种原因,我将不得不在不同的线程块中使用线程。
问题是如何实现等待任务 j_i 完成;并标记任务 k 完成;在 CUDA 中。我的实现是使用布尔数组作为标志。然后在任务完成后设置标志,并读取标志以检查任务是否完成。
但它只适用于小案例,一个大案例,GPU 因未知原因而崩溃。有没有更好的方法来实现 CUDA 中的等待和标记。
这基本上是CUDA上的线程间通信问题。