工作组和工作项执行

时间:2017-05-30 08:17:36

标签: opencl

我有几个初学者问题,我的笔记本电脑的GPU有:

  • 2个计算单位
  • 本地内存大小为48 KB
  • 最大工作组总大小1024
  • max_work_item_sizes :( 1024 1024 64)

我的问题非常简单:

  1. 那些48 KB的本地内存是每个计算单元还是整个GPU?
  2. 如果我只创建一个工作组,这是否意味着openCL不会使用我的一半GPU的能力?
  3. 最大工作组总大小与max_work_item_sizes之间是否存在关系?
  4. 非常感谢你的帮助

2 个答案:

答案 0 :(得分:1)

1)每个计算单位。

2)如果供应商实施可以使用单个工作组的所有计算单元,那么它就不重要了。 Nvidia和Amd不能这样做,因此他们使用单个计算单元。使用单个工作组也不能完全使用计算单元。每个计算单元至少需要几个工作组到数十个工作组才能提高效率。

3)否。您可以使用任何工作组大小,只要它是总工作项大小的整数分隔符。但是你无法跨越最大值。

答案 1 :(得分:1)

只是为了澄清@huseyin回答更多信息。

Compute unit != Local workgroup

计算单元是可以处理给定任务的核心,但它可以在内部具有许多工作组,这些工作组在许多不同的处理阶段中执行。为了最大化利用率并最大限度地减少内存延迟效应。

OpenCL报告的值是最大值。如果您使用总共1024个项目,它可能会为您提供更小的本地内存。或者使用所有本地内存,它可能禁止计算单元并行运行工作组,这将减慢执行速度。 始终使用您需要的值,而不是最大值。

使用内核编译CL_KERNEL_WORK_GROUP_SIZE之后报告的值来设置执行。不是设备给出的。