基于GPU的N ^ 2比较

sen*_*iwa 0 c++ concurrency gpgpu opencl

从GPU编程的新手,我求助于你的建议,请注意我对特定的hw解决方案并不感兴趣,所以NVidia/ATI没问题,尽管OpenCL可能更好.但一切都是洁净的!

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

而已.

显然,即使在多线程方法中达到列表中的数百万个元素时,这也不会扩展.

我了解了Cuda,并尝试了很少的程序,但每个程序都修改了一些东西.没有像并发向量或列表这样的例子,我现在用它来存储匹配的对.

你能指出我将这个移植到GPU的正确方向吗?

toh*_*ava 6

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

可以在推力gpu库中找到聚集,二进制搜索和排序.

请参见:https://github.com/thrust/thrust