【发布时间】:2014-09-19 07:10:28
【问题描述】:
我正在编写一个 OpenCL 程序 - 除其他外 - 需要根据白名单检查计算的 (int) 值。我的计划是将白名单存储在常量或共享内存中,然后让每个线程使用此共享白名单运行二进制搜索。
然后我读到了诸如银行冲突之类的事情,其中线程变慢了,因为它们正在访问同一银行上的内存,这会导致访问发生序列化。
由于此类问题,二分搜索是否会在 OpenCL 上导致更大的性能损失?使用其他搜索算法(例如哈希)会更好吗?
编辑 让我澄清一下我的程序:
每个线程都会进行并行计算,但输入值不同。因此,每个线程都会得到不同的输出。每个输出都需要根据同一个白名单进行检查。
内核会返回一个布尔值,表示搜索的结果。
我担心的是,由于每个线程都在进行独立的二进制搜索,因此多个线程最终会访问白名单的同一个银行,从而导致串行速度变慢。
【问题讨论】:
-
OpenCL 位操作的一个很好的例子是根本不进行计算(所有内存操作)的情况。这样减少全局内存的带宽需求会很有帮助。 -> stackoverflow.com/questions/20039890/…
-
我之前在 OpenCL 中做过二进制搜索;它们比 CPU 实现速度更快,但速度并不快。条件代码中存在一些分歧,但不会造成太大影响。
标签: c++ algorithm search opencl binary-search