如何从OpenCL设备写入/读取单个浮点值(缓冲区)

时间:2019-03-29 02:33:16

标签: c opencl hpc

关于如何从设备读取数组有很多问题,但是我只想从设备读取单个浮点值。还是只能从设备读取数组?

我为(浮动)总和创建一个缓冲区,如下所示。

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);

1 个答案:

答案 0 :(得分:2)

从设备读取数据(无论是单个值还是数组)都必须通过全局内存进行。因此内核签名必须为kernel calculate(..., global float *sum)。然后,您以发布方式从设备中读取它-将&result传递到clEnqueueReadBuffer