【发布时间】:2015-08-11 19:00:29
【问题描述】:
我想知道是否有一种标准方法可以以编程方式确定可在 GPU 上运行的最大并发工作组数。
例如,在具有 5 个计算单元(或 SM)的 NVIDIA 卡上,每个计算单元最多可以有 8 个工作组(或块),因此可以同时运行的最大工作组数为 40。
因为我可以使用clGetDeviceInfo 找到计算单元的数量,所以我只需要一个计算单元上可以运行的最大工作组数。
谢谢!
【问题讨论】:
我想知道是否有一种标准方法可以以编程方式确定可在 GPU 上运行的最大并发工作组数。
例如,在具有 5 个计算单元(或 SM)的 NVIDIA 卡上,每个计算单元最多可以有 8 个工作组(或块),因此可以同时运行的最大工作组数为 40。
因为我可以使用clGetDeviceInfo 找到计算单元的数量,所以我只需要一个计算单元上可以运行的最大工作组数。
谢谢!
【问题讨论】:
每个执行单元/SM 的最大组数受硬件资源限制。让我以 Intel Gen8 GPU 为例。每个子片包含 16 个屏障寄存器。因此,最多可以同时运行 16 个工作组。
此外,每个子片可用的共享本地内存量 (64KB)。例如,如果一个工作组需要 32KB 的共享本地内存,那么无论工作组大小如何,这些工作组中只有 2 个可以同时运行。
【讨论】:
我通常使用计算单元的数量作为工作组的数量。我喜欢扩大组的大小以使硬件饱和,而不是强制 gpu '同时'安排许多工作组。
我不知道如何在不查看供应商规范的情况下确定最大组数。
【讨论】:
1024/CL_DEVICE_MAX_WORK_GROUP_SIZE 确定没有工作组。