- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
应用程序是求两个排序的整数列表的交集(集合交集),比如 list1 和 list2。
list1的每个元素都会被分配一个GPU线程,进行二分查找是否出现在list2中。很容易看出,在这个应用程序中会有大量的线程分歧。我想知道是否有什么好的方法可以减少线程分歧。我正在使用 CUDA 来实现这个应用程序。
我知道有一种方法叫做 P-ary search,但我的任务是减少二分查找的线程发散。我也知道有一个名为 thrust 的库,但似乎没有尝试减少分歧。
最佳答案
如果两个列表都已排序,则二分查找不是您可以执行的最佳算法。二进制搜索将给出 O(n lg n)
,但仅执行类似合并的算法,仅取交集,是 O(n)
。
这是一个使用 GPU 的愚蠢算法。我看到的唯一情况是您刚刚在 GPU 中生成了数据。在这种情况下,您希望将问题分解为一堆较小的交集并为每个交集分配一个线程。
为此,选择 list1 的 k
个等距元素,并使用二进制搜索在 list2 中找到它们。类似地,从 list2 中选取 k
个等距元素,并在 list1 中找到它们。您现在在每个列表中有 2k
个范围,其中每个范围最多有 N/k
个元素。现在将这些范围平行相交。 (将 k
设置为您想要的线程数的一半。)
关于algorithm - 如何使用CUDA减少二分查找的分支发散,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10389308/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!