clEnqueueNDRangeKernel的opencl global_work_size

时间:2013-04-05 12:49:53

标签: opencl

clEnqueueNDRangeKernel global_work_size参数应为2的幂? 如果没有,那么返回错误(如果有的话)不是2的权力?

UPD 根据答案:全球和本地工作规模不应该是2的权力。 工作组大小和波前大小之间的关系是什么?:

  • 如果wavefront size是64并且local_work_size< 64 - 在每个锁定步骤64中将执行工作项,而(64 - local_work_size)将是work_items“无所事事”。
  • 如果128> local_work_size> 64 - 执行将如何?在偶数锁步中,将执行整个波前(64个工作项)和一个local_work_size%64

3 个答案:

答案 0 :(得分:1)

全局工作大小不一定是2的幂,它可以是任何正整数且小于设备允许的最大工作项数。

答案 1 :(得分:1)

值不需要是2的幂,但它必须是可被工作组大小整除的数字。

答案 2 :(得分:0)

正如已经说过的那样,它不一定是2的强大功能。但是为了获得良好的性能,你必须选择32的倍数的本地工作大小(参见相关问题:{ {3}})

因此,由于您的本地工作规模必须是全球工作规模的分隔线,因此您可能拥有两个权力(一个优化来源是选择一个大于必要的全球工作规模;以便选择一个好的当地的工作规模,你必须尝试一些)