2016-07-06 54 views
3

我正在编写一个OpenCL代码来查找最佳工作组大小以在GPU上具有最大占用率。为此,我需要一个返回每个计算单元的最大工作项数的函数。OpenCl最大工作项目每个计算单位

基本上,我从CUDA代码派生出这个,我想要一个相当于maxThreadsPerMultiProcessor。 在CUDA这些是在设备上的查询所返回的值: 每个多处理器的最大线程数:2048 每个块的线程的最大数目:1024

在OpenCL的: CL_DEVICE_MAX_WORK_GROUP_SIZE:1024

在CUDA它不” t要求内核信息返回此值。 我需要OpenCL的等效函数。 在此先感谢。

回答

3

要获得每个计算单元的最大工作项数,请使用clGetDeviceInfo()和CL_DEVICE_MAX_WORK_GROUP_SIZE标志。这将返回“设备能够在单个计算单元上执行的工作组中的最大工作项数量”,这几乎是您想要的。

最佳工作组大小不仅取决于设备,还取决于所使用的特定内核。为此,您可以使用带有CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE标志的clGetKernelWorkGroupInfo()函数。这“返回启动时工作组大小的首选倍数”,这是“性能提示”。

如果您使用的是C++绑定,请分别对设备和内核对象使用getInfo()和getWorkGroupInfo()方法。