【发布时间】:2016-10-30 22:58:09
【问题描述】:
我编写了一个简单的 OpenCL-raycaster,其中每个线程代表一个像素。当然,一些线程,尤其是那些只显示空 void 的线程与其他线程相比终止得相当快。我的问题是:在return 之后,其他内核是否可以运行使用过的内核,或者它们是否在工作组的最后一个甚至整个程序完成后都被释放?
【问题讨论】:
标签: c++ multithreading opencl
我编写了一个简单的 OpenCL-raycaster,其中每个线程代表一个像素。当然,一些线程,尤其是那些只显示空 void 的线程与其他线程相比终止得相当快。我的问题是:在return 之后,其他内核是否可以运行使用过的内核,或者它们是否在工作组的最后一个甚至整个程序完成后都被释放?
【问题讨论】:
标签: c++ multithreading opencl
在 OpenCL 中,全局工作大小被细分为多个工作组(可以串行或并行执行,直至实现,但在任何一种情况下都是独立的)。工作组大小各不相同(例如,32 到 256 个项目是典型的),您还可以指定工作组大小。在工作组中的所有线程都完成之前,工作组不会终止,因此一个线程上的繁重处理与附近线程上的轻量处理相结合可能会留下空闲的硬件。但是,由于局部性(对象与空白空间),这可能只会发生在对象的边界上。此外,在一个工作组中,一些线程可能被组合在一起并作为 SIMD 处理,这也意味着分支可能会导致空闲硬件(研究“线程分歧”)。
【讨论】: