【发布时间】:2011-10-16 12:34:43
【问题描述】:
我正在 CUDA 中对凸包实施分而治之的方法。这是我的方法: 自下而上:
- 创建一个列表来存储凸包;
curSize = 输入大小(所有点);
对于 i: 1 记录 N
- 开始
- curSize = curSize / 2;
- 获取列表列表中每 2 个相邻的凸包并合并它们 进入更大的船体(使用标准的上下公切线 curSize 线程中分治凸包的方法
- //最初它将列表中的每2个相邻点合并为一个外壳,然后 在下一次迭代中,它将大小为 2 的凸包合并为更大的 凸包等等..,最后列表列表将有一个 船体上的单个点列表
- 结束
但是它变得太复杂了,我觉得我没有利用 CUDA 的并行能力,因为在树的每个级别我创建了 N/2^i 个线程,其复杂性为 O(N) 以合并该级别的所有相邻船体.因此,网络复杂度仍然是 O(N logN)。
你能告诉我如何让它变得更好,或者为凸包提供任何替代的更整洁的并行算法(如果我能得到 graham 扫描的并行版本的算法,那就太好了)?
【问题讨论】:
标签: algorithm computational-geometry gpu