OpenCL线程占用



我写了一个简单的OpenCL-raycaster,每个线程代表一个像素。当然,有些线程,特别是那些只显示空void的线程比其他线程终止得快得多。我的问题是:使用的内核是否可用于其他内核在它们return之后运行,或者在工作组的最后一个甚至整个程序完成后,它们是否都被释放?

在OpenCL中,全局工作大小被细分为许多工作组(可以串行或并行执行,直到实现,但在任何一种情况下都是独立的)。工作组的大小各不相同(例如,典型的是32到256个条目),您也可以指定工作组的大小。直到工作组中的所有线程都完成后,工作组才会终止,因此一个线程上的繁重处理加上附近线程上的轻处理可能会导致硬件空闲。然而,由于局部性(对象与空白空间),这可能只会发生在对象的边界上。此外,在工作组中,一些线程可能被分组在一起并作为SIMD进行处理,这也意味着分支可能导致空闲硬件(研究"线程分歧")。

最新更新