【发布时间】:2021-04-10 22:58:53
【问题描述】:
我目前正在开发一种基于 CA 的流体模拟的计算着色器。我当前的算法写入当前正在计算的单元格的直接邻居。我目前的想法是让一个线程计算我的 CA 网格的 3x3 区域,然后,每个 3x3 区域彼此相邻。从理论上讲,这将确保正在写入的像素不会被过早读取。
我需要一些方法来阻止一个线程继续运行,直到所有其他线程都达到同一点。
伪代码:
for (int i = 0; i < 9; i+) {
// do all calculations necessary
while(true) {
if (allThreadsDone)
break;
}
}
如果每个线程的计算都是常数时间,这可能不是必需的,我不知道这是不是真的。
【问题讨论】:
-
你能以某种方式重写它,让它只写入自己的单元格吗?同步重线程应用程序效率不高,而且通常只是噩梦。通常有一个浪费的算法但不需要任何同步会更容易和更快。
标签: multithreading unity3d gpu hlsl cellular-automata