我已经使用openCL编写了一个空间哈希图,用于在集合中的点之间进行距离查询。这个想法是针对集合中的每个点的,我想在特定半径内找到集合中的所有其他点。
现在,我分两遍进行搜索:在第一遍中,我找到每个查询点的所有相邻点,然后将结果总数返回给CPU(作为单个原子递增的整数),然后我构造了一个该大小的缓冲区,然后在第二遍中再次进行搜索,这次将邻居添加到该缓冲区中,然后将其发送回CPU进行处理。使用此方法,可以保证缓冲区的大小恰好是所得点大小的大小,但是由于此技术分两次进行完整的搜索查询,因此其占用的时间是假设的理想解决方案的两倍。
另一种解决方案可能是构造一个缓冲区,即使从未真正填充过结果,该缓冲区也能够保持最大数量的结果。但是,在点非常分散的情况下,这可能意味着我构造了一个缓冲区,该缓冲区具有足够的空间来容纳数百万个条目,最终只能容纳几个(甚至没有一个)……这似乎效率极低。
还有其他方法可以做这种事情吗?还是两次通过解决方案是最好的解决方案?