Открыть CL clEnqueueReadBuffer время выполнения - PullRequest
2 голосов
/ 22 марта 2012

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

1 Ответ

2 голосов
/ 02 марта 2013

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...