【问题标题】:work-groups and work-items execution工作组和工作项执行
【发布时间】:2017-10-30 14:54:00
【问题描述】:

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

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

我的问题很简单:

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

非常感谢您的帮助

【问题讨论】:

  • 但你不能跨越单个最大值

标签: opencl


【解决方案1】:

1) 每个计算单元。

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

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

【讨论】:

  • 多谢回复,本地内存呢,是不是只有计算单元才能访问?或者其他计算单元也可以访问它?
  • 我的意思是每个cu只访问自己的本地内存
【解决方案2】:

只是为了澄清@huseyin 的答案,提供更多信息。

Compute unit != Local workgroup

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2019-09-07
    • 2012-02-17
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多