Как записать / прочитать одно значение с плавающей точкой (буфер) с устройства OpenCL - PullRequest
0 голосов
/ 29 марта 2019

Есть много вопросов о том, как читать массив с устройства, но я хочу прочитать только одно значение с плавающей точкой с устройства. Или он только может прочитать массив с устройства?

Я создаю буфер для (float) суммы, как показано ниже.

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 Ответ

2 голосов
/ 29 марта 2019

Чтение с устройства, будь то для отдельного значения или массива, должно проходить через глобальную память.Таким образом, подпись ядра должна быть kernel calculate(..., global float *sum).Затем вы читаете его с устройства так, как отправили, передавая &result в clEnqueueReadBuffer.

...