我正在编写OpenCL
代码,以找到最佳工作组大小,以便在GPU上占用最多。为此,我想要一个函数,它返回每个计算单元的最大工作项数。
基本上,我是从CUDA
代码中推导出来的,我希望等同于maxThreadsPerMultiProcessor
。
在CUDA中,这些是设备查询返回的值:
每个多处理器的最大线程数:2048
每个块的最大线程数:1024
在OpenCL中: CL_DEVICE_MAX_WORK_GROUP_SIZE:1024
在CUDA中,它不会要求内核信息返回此值。 我需要OpenCL的等效函数。 提前谢谢。
答案 0 :(得分:4)
要获取每个计算单元的最大工作项数,请将clGetDeviceInfo()与CL_DEVICE_MAX_WORK_GROUP_SIZE标志一起使用。这将返回设备能够在单个计算单元上执行的工作组中的最大工作项数"这几乎是您想要的。
最佳工作组大小不仅取决于设备,还取决于所使用的特定内核。为此,您可以将clGetKernelWorkGroupInfo()函数与CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE标志一起使用。这个"返回启动"的工作组大小的首选倍数,这是一个"性能提示"。
如果您正在使用C ++绑定,请分别对设备和内核对象使用getInfo()和getWorkGroupInfo()方法。