求解惑,每个核函数中有一个排序算法,是否适合用opencl加速

zwmeimeimei 2015-03-05 05:37:22
本人初学opencl,希望将算法中的一个模块用opencl加速,这个模块每执行一次循环迭代都要进行一次排序,排序的数据量大概是1000左右,采用堆排序,可否将这个模块写成核函数进行opencl加速
注意,不是将排序算法并行运算,而是每次并行运算中都有一个排序算法,这种情况适合用opencl吗?
...全文
1014 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fronteer 2015-03-19
  • 打赏
  • 举报
回复
1000 根本没必要用 GPU, 现在的 GPU 计算能力越来越强, 需要很大的数据规模才能发挥优势。Sorting 算法本质上串行因素比较大, 很适合 CPU, 但数据量大的情况下, 用bitonic 算法结合GPU多个计算单元分段排序再合并,也是可能提高sorting 的性能的。 另外, 从要解决问题的目标考虑, sorting 的目的可能是要进行查找 (用 key 二分查找), 可利用GPU计算线程多的特点, 不用sorting 直接查找可能性能更好, 特别是数据不断增加的情况下,每次数据增加后CPU都要重新sorting, 可能不如利用GPU直接search.
lcwyylcwyy 2015-03-19
  • 打赏
  • 举报
回复
建议采用桶排序试试
zenny_chen 2015-03-17
  • 打赏
  • 举报
回复
做法有很多。首先,排序算法有一些比较适合GPU的;其次,对于数据量不大的排序可以通过以work-group为单位做模拟的任务级并行计算,不同work-group之间的计算可以被并发执行的。最后提醒一下,在kernel程序里是做不了动态内存分配的。所以排序算法先要针对GPU的处理特性做好设计。
outstander 2015-03-14
  • 打赏
  • 举报
回复
可以在每个线程里使用单独使用排序算法的。但建议不要用太复杂的排序算法,GPU对逻辑判断和循环支持和执行效率较差

604

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧