工作组和工作项执行

work-groups and work-items execution

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

我的问题很简单:

  1. 那 48 KB 的本地内存是每个计算单元还是整个 GPU?
  2. 如果我只创建一个工作组,是否意味着 openCL 不会使用我 GPU 的一半容量?
  3. 最大工作组总大小和 max_work_item_sizes 之间有关系吗?

非常感谢您的帮助

1) 每个计算单元。

2) 如果供应商实施可以将所有计算单元用于单个工作组,那么这无关紧要。 Nvidia 和 Amd 无法做到这一点,因此他们使用单个计算单元。使用单个工作组也不会完全使用计算单元。每个计算单元至少需要几个工作组到几十个工作组才能变得高效。

3) 不可以。您可以使用任何工作组大小,只要它是工作项总大小的整数分频器即可。但是你不能超过那个最大值。

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

Compute unit != Local workgroup

一个计算单元是一个可以处理给定任务的核心,但它内部可以有许多工作组在许多不同的处理阶段执行。为了最大化利用率和最小化内存延迟影响。

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

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