【发布时间】:2012-09-05 22:21:21
【问题描述】:
我正在尝试将一些任务“映射”到 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
出于某种原因,我将不得不在不同的线程块中使用线程。
问题是如何在CUDA中实现等待任务j_i完成;和标记任务k完成;。我的实现是使用布尔数组作为标志。然后在任务完成后设置标志,并读取标志以检查任务是否完成。
但它只适用于小案例,一个大案例,GPU 因未知原因而崩溃。有没有更好的方法来实现 CUDA 中的 Wait 和 Mark。
这基本上是CUDA上的线程间通信问题。
【问题讨论】:
-
您将不得不为此使用原子操作.. 这会花费很多。
标签: cuda synchronization gpu