我写了一个简单的OpenCL-raycaster,其中每个线程代表一个像素。当然,与其他线程相比,一些线程,特别是那些刚刚显示为空的线程终止得相当快。我的问题是:使用过的内核是否可供其他内核在return后运行,还是在工作组的最后一个甚至整个程序完成后释放?
发布于 2016-10-30 22:58:09
在OpenCL中,全局工作大小被细分为多个工作组(这些工作组可以串行或并行执行,直到实现,但在任何一种情况下都是独立的)。工作组大小各不相同(例如,通常为32到256个项目),您也可以指定工作组大小。在工作组中的所有线程都完成之前,工作组不会终止,因此一个线程上的繁重处理与附近线程上的轻量级处理相结合,可能会留下空闲的硬件。然而,由于局部性(对象与空白空间),这可能只会发生在对象的边界上。此外,在一个工作组中,一些线程可能被分组在一起,并作为SIMD处理,这也意味着分支可能导致硬件空闲(学习“线程分歧”)。
https://stackoverflow.com/questions/40310336
复制相似问题