Opencl 排队范围内核序列

Opencl 排队范围内核序列,opencl,Opencl,如果我使用最大本地组大小和一些较大的全局组大小调用EnqueuenRange,我可以确保本地组内核将按顺序执行吗 i、 e: AFAIK参数global_work_size指定NDRange每个维度中的工作项数量,local_work_size指定工作组每个维度中的工作项数量 所有工作项和工作组应并行运行,而工作组内的工作项以锁步方式运行,不同的工作组将执行不同的SIMD引擎,但它们应并行运行,除非GPU上存在可用SIMD引擎数量方面的硬件限制,wave/warp调度程序限制等。不能保证同一组中

如果我使用最大本地组大小和一些较大的全局组大小调用EnqueuenRange,我可以确保本地组内核将按顺序执行吗

i、 e:


AFAIK参数global_work_size指定NDRange每个维度中的工作项数量,local_work_size指定工作组每个维度中的工作项数量


所有工作项和工作组应并行运行,而工作组内的工作项以锁步方式运行,不同的工作组将执行不同的SIMD引擎,但它们应并行运行,除非GPU上存在可用SIMD引擎数量方面的硬件限制,wave/warp调度程序限制等。

不能保证同一组中的工作项将按顺序运行。这就是为什么需要使用屏障在内核中的重要点同步组。卡与卡之间gpu硬件的差异使项目无法按顺序执行的原因相当明显。即使您访问内存的方式也可能意味着工作项很少同步——即使对于您正在优化的特定gpu也是如此

 Global 0 : Local 0 1 2 3 4
 Global 5 : Local 0 1 2 3 4
 Global 10 : Local 0 1 2 3 4
 etc