在 OpenGL 2.1 中,工作组被细分为子组。work_group_barrier()
同步工作组中的所有工作项,sub_group_barrier()
仅同步一个子组中的工作项。
是否可以同步一系列子组中的工作项?
例如,一个工作组由 5 个子组组成,每个子组包含 64 个工作项。子组 0 和 1(= 工作项 0 - 128)应该同步,以便在屏障之后子组 0 的工作项可以访问子组 1)写入的数据。同时,子组 2、3 和 4 可以在不参与此同步的情况下继续进行,可能执行代码的不同部分。
在 CUDA 中,使用内联 PTX 程序集(相当于子组,32 个线程)可以实现扭曲:CUDA: how to use barrier.sync
有没有办法在 AMD 平台上使用 OpenCL 来做到这一点,也可能使用内联汇编代码?如果没有,AMD 平台是否有另一种 GPGPU API/语言允许这样做?