我写了一个简单的OpenCL-raycaster,其中每个线程代表一个像素。当然,有些线程,特别是那些只显示空虚的线程,与其他线程相比,很快就会终止。我的问题是:在return
之后运行的其他内核是否可用,或者在最后一个工作组甚至整个程序完成后它们都被释放了?
答案 0 :(得分:1)
在OpenCL中,全局工作量被细分为多个工作组(可以串行或并行执行,直到实现,但在任何一种情况下都是独立的)。工作组大小各不相同(例如,通常为32到256项),您还可以指定工作组大小。在完成工作组中的所有线程之前,工作组不会终止,因此一个线程上的繁重处理与附近线程上的光处理相结合可能会留下空闲硬件。但是,由于局部性(对象与空白空间),这可能只发生在对象的边界上。此外,在工作组中,一些线程可以组合在一起并作为SIMD处理,这也意味着分支可能导致空闲硬件(研究“线程分歧”)。