如何阻止特定线程,直到其他线程在OpenCL中计算它所需的值。
答案 0 :(得分:1)
如果“thread”指的是主机代码,请使用设备clEnqueueReadBuffe(buffer,/*wait*/CL_TRUE,...)
的阻止读取。如果您使用无序执行创建了队列,请将事件附加到计算它的内核并等待该事件。
如果您需要等待设备本身,请先打开内核中的get_*_id(...)
并使用barrier(CLK_GLOBAL_MEM_FENCE)
,以便工作组中的其他工作项 (不是所有工作项目)等待那一点。如果您需要所有内核的值,那么在内核之前使用{em}来运行的单线程内核,并将值传递给缓冲区。