我对open cl和工作项感到困惑。假设我的设备可以同时运行128个工作项。然而,我提供了两个工作组,每个工作组有64个工作项。两个组是同时执行,还是64个线程在串行执行时处于空闲状态?
如果您将全局大小128x1x1
和本地大小64x1x1
的单个内核排队,那么将有两个工作组,它们可以同时运行。每个组都可以在单独的计算单元上执行,因此如果您的硬件上有两个计算单元,您可以并行运行这两个组。
如果您的本地大小对于硬件来说太大,因此每个计算单元中没有足够的处理元素,那么每个工作组将被分成子组。这些子组将“串行”执行。请注意,“串行”不一定是描述执行的最佳方式,因为实际上可能会发生上下文切换。这意味着一个子组可以开始工作,发出内存请求,然后切换到另一个子组,以便它可以开始工作。假设上下文切换很便宜(例如,在GPU上),这可能是隐藏全局内存访问中的一些延迟的有效方法。