问题描述
我目前正在研究一种基于 CA 的流体模拟的计算着色器。我当前的算法写入当前正在计算的单元格的直接邻居。我目前的想法是让一个线程计算我的 CA 网格的 3x3 区域,然后每个 3x3 区域与另一个相邻。这在理论上可以确保正在写入的像素不会被过早读取。
我需要一些方法来阻止一个线程继续运行,直到所有其他线程都达到同一点。
伪代码:
for (int i = 0; i < 9; i+) {
// do all calculations necessary
while(true) {
if (allThreadsDone)
break;
}
}
如果每个线程的计算都是常数时间,这可能没有必要,我不知道这是不是真的。
解决方法
我对它进行了更多研究,似乎无法停止 GPU 线程。我还被告知,如果线程具有恒定数量的指令,则它们会同时结束。