0

在参数中clEnqueueNDRangeKernel应该global_work_size 是 2 的幂?如果不是,并且返回的不是两个错误(如果有的话)?

UPD 基于答案:全局和本地工作大小不应该是两个的幂。工作组大小和波前大小之间的关系如何?:

  • 如果波前大小为 64 且 local_work_size < 64 - 在每个锁定步骤中,将执行 64 个工作项,而 (64 - local_work_size) 将是“什么都不做”的工作项。
  • 如果 128 > local_work_size > 64 - 执行情况如何?在甚至锁步中,整个波前将被执行(64 个工作项),并且在一个 local_work_size % 64 中执行
4

3 回答 3

1

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

于 2013-04-05T13:24:01.660 回答
1

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

于 2013-04-05T16:40:46.847 回答
0

正如已经说过的,它不一定是 2 的幂。但为了获得良好的性能,您必须选择 32 的倍数的本地工作大小(请参阅此相关问题:关于全局和当地工作规模

因此,由于您的本地工作量必须是您的全局工作量的除数,因此您可能有 2 的幂(优化的一个来源是选择比必要更大的全局工作量;为了选择一个好的局部工作量,你必须尝试一些)

于 2013-04-07T19:40:32.953 回答