关于如何从设备读取数组有很多问题,但我只想从设备中读取一个浮点值。或者它只能从设备读取数组?
我为(float)sum创建一个缓冲区,如下所示。
ocl.sum = clCreateBuffer(context, CL_MEM_READ_WRITE, 1, NULL, &err);
像这样设置arg。
clSetKernelArg(kernel, 0, sizeof(cl_men), &ocl.arr);
clSetKernelArg(kernel, 1, sizeof(cl_float), &ocl.sum);
在内核中,我计算总和。
kernel calculate(global arr, float sum)
{
...
sum = 100.0f;
}
毕竟我如何从设备中获得总和?
float result = 0.f;
err = clEnqueueReadBuffer(queue, ocl.sum, CL_TRUE, 0, 1, &result, 0, NULL, NULL);
print(result);
从设备读取,无论是单个值还是数组都必须通过全局内存。所以内核签名必须是kernel calculate(..., global float *sum)
。然后你通过将&result
传递给clEnqueueReadBuffer
,从你发布的方式中读取它。