基于gpu的N^2比较



作为GPU编程的新手,我向您寻求建议,请注意我对特定的解决方案并不感兴趣,所以NVidia/ATI是可以的,尽管可能OpenCL会更好。但一切都是洁食!

那么,我有两个64位整数对序列,假设是list(<top, bottom>),我需要将列表中的每个元素与其他元素进行比较。是的,一个简单的N^2算法。详细地说,我需要看看,给定列表中的l1l2, l1.top == l2.bottom。如果是,存储匹配的元素,否则,丢弃它们。

显然,即使在多线程方法中,当列表中有数百万个元素时,这也无法扩展。

我了解了Cuda,并尝试了一些程序,但每个程序都修改了一些东西。没有类似并行向量或列表的例子,我现在用它们来存储匹配对。

你能告诉我把这个移植到GPU的正确方向吗?

创建列表的两个副本,一个按顶部排序,一个按底部排序。然后使用并行二进制搜索匹配第一个副本顶部和第二个副本底部。最后使用聚集操作收集匹配的对。

收集,二进制搜索和排序,可以在thrust gpu库中找到。

请看这里:https://github.com/thrust/thrust

最新更新