2012-03-22 3 views
1

im writing open cl flocking и у меня странная проблема. Перед выполнением Kernel Execute clEnqueueReadBuffer считывает из gpu mem в массив памяти mem 20000 без проблем, очень быстро, но после запуска ядра, который выполнял некоторую операцию над этим переданным массивом, readbuffer длился слишком долго (~ 150 мс). Зачем? В обоих случаях массив заполнялся данными. Что, возможно, неправильно делает мое ядро? (этот переданный массив __global).Открыть CL clEnqueueReadBuffer выполнить время

+0

Как память gpu заполнялась данными перед запуском ядра? – ardiyu07

ответ

1

clEnqueueNDRangeKernel на самом деле не запускает ядра, это «засыпает» их. Реализация OpenCL может запускать ядра всякий раз, когда он сочтет нужным (в этом случае, когда вы просите прочитать результаты, поскольку для проверки результатов необходимо запустить ядро).

Вы можете, однако, заставлять реализацию запускать ядра через clFinish.

В вашем случае задержка в 150 мс - это время, затрачиваемое на запуск ядра.

Если вы вызываете clFinish между выполнением и вторым чтением, он будет работать.

Смежные вопросы