工作组和工作项执行
work-groups and work-items execution
我有几个初学者问题,我笔记本电脑的 GPU 有:
- 2 个计算单元
- 本地内存大小为 48 KB
- 最大工作组总大小为 1024
- max_work_item_sizes:( 1024 1024 64 )
我的问题很简单:
- 那 48 KB 的本地内存是每个计算单元还是整个 GPU?
- 如果我只创建一个工作组,是否意味着 openCL 不会使用我 GPU 的一半容量?
- 最大工作组总大小和 max_work_item_sizes 之间有关系吗?
非常感谢您的帮助
1) 每个计算单元。
2) 如果供应商实施可以将所有计算单元用于单个工作组,那么这无关紧要。 Nvidia 和 Amd 无法做到这一点,因此他们使用单个计算单元。使用单个工作组也不会完全使用计算单元。每个计算单元至少需要几个工作组到几十个工作组才能变得高效。
3) 不可以。您可以使用任何工作组大小,只要它是工作项总大小的整数分频器即可。但是你不能超过那个最大值。
只是为了用更多信息澄清@huseyin 的回答。
Compute unit != Local workgroup
一个计算单元是一个可以处理给定任务的核心,但它内部可以有许多工作组在许多不同的处理阶段执行。为了最大化利用率和最小化内存延迟影响。
OpenCL 报告的值为最大值。如果您使用总共 1024 个项目,它可能会给您提供更小的可用本地内存。或者使用所有本地内存,它可能会禁止计算单元并行运行个工作组,这会减慢执行速度。
始终使用您需要的值,而不是最大值。
使用内核编译后报告的值 CL_KERNEL_WORK_GROUP_SIZE 来设置执行。不是设备给出的。
我有几个初学者问题,我笔记本电脑的 GPU 有:
- 2 个计算单元
- 本地内存大小为 48 KB
- 最大工作组总大小为 1024
- max_work_item_sizes:( 1024 1024 64 )
我的问题很简单:
- 那 48 KB 的本地内存是每个计算单元还是整个 GPU?
- 如果我只创建一个工作组,是否意味着 openCL 不会使用我 GPU 的一半容量?
- 最大工作组总大小和 max_work_item_sizes 之间有关系吗?
非常感谢您的帮助
1) 每个计算单元。
2) 如果供应商实施可以将所有计算单元用于单个工作组,那么这无关紧要。 Nvidia 和 Amd 无法做到这一点,因此他们使用单个计算单元。使用单个工作组也不会完全使用计算单元。每个计算单元至少需要几个工作组到几十个工作组才能变得高效。
3) 不可以。您可以使用任何工作组大小,只要它是工作项总大小的整数分频器即可。但是你不能超过那个最大值。
只是为了用更多信息澄清@huseyin 的回答。
Compute unit != Local workgroup
一个计算单元是一个可以处理给定任务的核心,但它内部可以有许多工作组在许多不同的处理阶段执行。为了最大化利用率和最小化内存延迟影响。
OpenCL 报告的值为最大值。如果您使用总共 1024 个项目,它可能会给您提供更小的可用本地内存。或者使用所有本地内存,它可能会禁止计算单元并行运行个工作组,这会减慢执行速度。 始终使用您需要的值,而不是最大值。
使用内核编译后报告的值 CL_KERNEL_WORK_GROUP_SIZE 来设置执行。不是设备给出的。