У меня возникли проблемы с clCreateBuffer в OpenCL. Я работаю с процессором AMD Fusion (A10-5800k), поэтому оба устройства (CPU и GPU) должны иметь возможность работать с памятью друг друга.OpenCL: AMD Fusion и CL_MEM_USE_HOST_PTR
Для буфера чтения и результата я делаю:
bufRead = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR, size, data, &err);
bufWrite = clCreateBuffer(context, CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR, size, result, &err);
Когда я называю мое ядро, то «результат» массив не изменяется. Я знаю, что обычные графические процессоры будут копировать данные в память устройства и работать над этим. Стали бы обычные GPU копировать данные после этого?
Однако я надеялся, что Fusion GPU не скопирует данные, поскольку он может работать с одним и тем же указателем. К сожалению, я не вижу никаких изменений в массиве «результат». Когда я читаю «bufWrite» с clEnqueueReadBuffer, я вижу изменения. (Я делаю clFinish перед чтением «результата», поэтому данные должны быть записаны)
Кто-нибудь знает, как по-настоящему работать с одним и тем же массивом с процессором и графическим процессором? Я действительно хочу избежать clEnqueueReadBuffer.
Спасибо,
Tomas
У меня нет времени, чтобы ответить на ваш вопрос прямо сейчас, но вот ответ я написал о APUs из некоторое время назад, которые могут помочь: http://stackoverflow.com/questions/12766578/access-path-in-zero-copy-in-opencl/12786498#12786498 – KLee1