我正在研究用c ++进行ADAS算法的优化。
我想使用OpenCL技术优化该算法。
我已经阅读了OpenCL的一些基本文档。
我开始知道内核代码是用C编写的,它正在进行优化。
但我想知道内核如何将工作分成不同的工作项?
单个语句如何为循环任务做什么。
请在OpenCL上与我分享您的知识。
Tr中,
阿斯温
答案 0 :(得分:1)
首先,C代码没有进行优化。并行性是。使用OpenCL进行优化仅适用于可以大量利用并行性的算法。如果你像常规C一样使用OpenCL,你可能会减慢你的算法速度。这是因为在主机和设备之间移动数据需要花费大量时间。
其次,内核不会将工作分成不同的工作项。相反,程序员通过启动多个内核来并行运行相同的内核代码来拆分它。您可以通过设置global_work_size
的{{1}}来设置要启动的内核数量。
如果你有一个迭代不相互依赖的for循环,那么用OpenCL进行优化可能是一个很好的部分。如果在该循环中有很多计算但是没有太多数据进入它并从中输出也是很好的。在这种情况下,您将循环的内部部分放入OpenCL内核并使用global_work_size启动它,该global_work_size等于for循环的总循环计数。