Как заставить определенный поток ждать, пока другие потоки не вычислят значение, требуемое для этого в OpenCL - PullRequest
0 голосов
/ 09 марта 2012

Как заблокировать определенный поток, пока другие потоки не вычислят значение, требуемое для этого в OpenCL.

1 Ответ

1 голос
/ 09 марта 2012

Если «поток» относится к коду хоста, используйте блокировку чтения с устройства clEnqueueReadBuffe(buffer,/*wait*/CL_TRUE,...).Если вы создали свою очередь с не по порядку выполнением, прикрепите событие к ядру, которое его вычисляет, и дождитесь этого события.

Если вам нужно подождать на самом устройстве, либо включите get_*_id(...) внутри ядра и используйте barrier(CLK_GLOBAL_MEM_FENCE), чтобы другие рабочие элементы в рабочей группе (не все рабочие элементы) ожидали в этот момент.Если вам нужно это значение для всех ядер, то используйте enqueueTask для однопоточного ядра, предшествующего перед вашим ядром, и передайте значение в буфер.

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