OpenCL - 为大型数据集设置本地内存

时间:2017-04-09 14:04:04

标签: opencl

我有以下问题。我有6000 * 1000个元素,我需要并行处理(对于大多数部分)。但是,在内核的某些部分,这6000个项目必须总结在一起。

当我尝试设置我的内核输入(globalThreads = 6000 * 1000,localThreads = 6000)时,它似乎抛出一个错误(CL_INVALID_WORK_GROUP_SIZE)。似乎工作组中的本地元素的最大数量是有限的。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法将本地线程设置为高。大多数硬件只能执行128到1024左右的本地线程(带有CL_DEVICE_MAX_WORK_GROUP_SIZE的clGetDeviceInfo会告诉您设备)。您可以将本地大小保留为NULL,运行时将为您选择一个大小,但如果您的全局大小不是设备工作组大小的倍数,则可能无法获得最佳性能。对于最佳性能,您可以尝试不同的本地大小,然后指定两者,但全局必须是OpenCL 1.x中本地大小的倍数。对全局进行舍入,然后检查内核中的工作项索引,看它是否低于实际工作量。