每个计算单元的OpenCl最大工作项数

3
我正在编写一个 OpenCL 代码,以找到最佳的工作组大小,以在 GPU 上实现最大的利用率。为此,我需要一个函数来返回每个计算单元的最大工作项数。
基本上,我是从 CUDA 代码中推导出这个值的,我想要一个等价于 maxThreadsPerMultiProcessor 的函数。 在 CUDA 中,设备查询返回了以下值: 每个多处理器的最大线程数:2048 每个块的最大线程数:1024
在 OpenCL 中: CL_DEVICE_MAX_WORK_GROUP_SIZE:1024
在 CUDA 中,不需要内核信息就可以返回该值。 我需要一个与 OpenCL 等效的函数。 提前致谢。
1个回答

4
为了获得每个计算单元的最大工作项数,请使用clGetDeviceInfo()与CL_DEVICE_MAX_WORK_GROUP_SIZE标志一起使用。这将返回“设备能够在单个计算单元上执行的工作组中的最大工作项数”,这正是您想要的。
最佳工作组大小不仅取决于设备,还取决于正在使用的特定内核。为此,您可以使用clGetKernelWorkGroupInfo()函数与CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE标志。这个“返回启动的工作组大小的首选倍数”,这是一个“性能提示”。
如果您使用C++绑定,请分别使用设备和内核对象的getInfo()和getWorkGroupInfo()方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接