最近我一直在使用OpenCL,并且能够编写只使用全局内存的简单内核。现在我想开始使用本地内存,但是我似乎无法弄清楚如何使用get_local_size()
和get_local_id()
每次计算一个输出“块”。
例如,假设我想要将苹果的OpenCL Hello World示例内核转换为使用本地内存的内容,你会怎么做?以下是原始内核源代码:
__kernel square(
__global float *input,
__global float *output,
const unsigned int count)
{
int i = get_global_id(0);
if (i < count)
output[i] = input[i] * input[i];
}
如果这个示例不能轻松转换为展示如何利用本地内存的示例,任何其他简单的示例也可以。
clSetKernelArg(kernel, 2, sizeof(cl_float) * local_work_size[0], NULL);
其中local_work_size [0]
是维度0的工作组大小。请注意不要改变原意。 - Tom