【发布时间】:2019-03-29 02:33:16
【问题描述】:
关于如何从设备中读取数组有很多问题,但我只想从设备中读取单个浮点值。还是只能从设备中读取一个数组?
我为 (float) sum 创建一个缓冲区,如下所示。
ocl.sum = clCreateBuffer(context, CL_MEM_READ_WRITE, 1, NULL, &err);
像这样设置参数。
clSetKernelArg(kernel, 0, sizeof(cl_mem), &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);
【问题讨论】:
-
我也想减少内核,例如 [this] (stackoverflow.com/questions/20613013/opencl-float-sum-reduction/…) 问题。但我认为传递单个值而不是传递一个组 sums[] 是更高的性能。不是吗?有可能吗?