确定最佳工作组大小和工作组数的算法是什么

Ken*_*tzo 12 opencl

OpenCL标准定义了以下选项以获取有关设备和已编译内核的信息:

  • CL_DEVICE_MAX_COMPUTE_UNITS

  • CL_DEVICE_MAX_WORK_GROUP_SIZE

  • CL_KERNEL_WORK_GROUP_SIZE

  • CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE

鉴于此值,我如何计算工作组的最佳大小和工作组的数量?

mfa*_*mfa 7

您可以通过实验方法为算法发现这些值.使用分析器获取硬数字.

我喜欢使用CL_DEVICE_MAX_COMPUTE_UNITS作为工作组的数量,因为我经常依赖于同步工作项.我通常运行带有少量分支的内核,因此需要花费相同的时间在每个计算单元中执行.

CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE的某些倍数将是您设备的最佳选择.实际上这个倍数取决于您的内存访问模式以及您对每个工作项执行的工作类型.当您运行繁重的计算绑定(ALU)内核时,请使用1作为倍数.如果您遇到内存访问的瓶颈,请尝试使用更大的倍数来隐藏内存延迟.使用分析器确定您的访问时间和ALU时间是否最佳.

对于任何设备,ALU获取的最佳比率为1:1.这在实践中很少实现,因此您希望保持ALU/SIMD库饱和.这意味着ALU:fetch应尽可能大于1.小于1意味着您应该尝试更大的工作组大小以更好地隐藏内存延迟.