作为GPU编程的新手,我向您寻求建议,请注意我对特定的解决方案并不感兴趣,所以NVidia/ATI是可以的,尽管可能OpenCL会更好。但一切都是洁食!
那么,我有两个64位整数对序列,假设是list(<top, bottom>)
,我需要将列表中的每个元素与其他元素进行比较。是的,一个简单的N^2
算法。详细地说,我需要看看,给定列表中的l1
和l2
, l1.top == l2.bottom
。如果是,存储匹配的元素,否则,丢弃它们。
。
显然,即使在多线程方法中,当列表中有数百万个元素时,这也无法扩展。
我了解了Cuda,并尝试了一些程序,但每个程序都修改了一些东西。没有类似并行向量或列表的例子,我现在用它们来存储匹配对。
你能告诉我把这个移植到GPU的正确方向吗?
创建列表的两个副本,一个按顶部排序,一个按底部排序。然后使用并行二进制搜索匹配第一个副本顶部和第二个副本底部。最后使用聚集操作收集匹配的对。
收集,二进制搜索和排序,可以在thrust gpu库中找到。
请看这里:https://github.com/thrust/thrust