【发布时间】:2016-09-03 09:12:16
【问题描述】:
我学习 OpenCL 是为了实现一个相对复杂的图像处理算法,其中包括几个应该作为内核实现的子例程。
该实现旨在在 Mali T-6xx GPU 上进行。
我阅读了“OpenCL Programming by Example”一书和“Optimizing OpenCL kernels on the Mali-T600 GPUs”文档。
在书中的示例中,他们使用了一些全局大小的工作项,每个工作项在 for 循环中处理几个像素。
在文档中,内核是在没有循环的情况下编写的,因为内核中的每个工作项只有一次执行。
由于可能在 Mali T-600 GPU 上生成的工作项的最大全局大小为 256(这仅适用于简单内核)而且在大多数图像中显然有更多像素需要处理,据我了解内核没有循环将尽快产生更多的工作项线程,直到工作项的全局大小完成执行内核并且全局大小可能只是图像中的像素量。那正确吗?这样它本身就是一种线程生成循环?
另一方面,在书中。全局工作大小小于要处理的像素数量,但内核有循环使每个工作项在执行内核代码时处理几个像素。
所以我想知道哪种方法是编写图像处理内核或任何 OpenCL 内核的正确方法 重要的是,在什么情况下一种方式可能比另一种更好,假设我对两种方式都理解正确......
【问题讨论】:
标签: loops kernel opencl gpu mali