ホストで複数の C++11 スレッド (GCC 4.7.1) を並列に実行する必要があります。それぞれが GPU などのデバイスを使用する必要があります。OpenCL 1.2 仕様 (p. 357) によると:
All OpenCL API calls are thread-safe75 except clSetKernelArg.
clSetKernelArg is safe to call from any host thread, and is safe
to call re-entrantly so long as concurrent calls operate on different
cl_kernel objects. However, the behavior of the cl_kernel object is
undefined if clSetKernelArg is called from multiple host threads on
the same cl_kernel object at the same time.
洗練された方法は、thread_local cl_kernel オブジェクトを使用することであり、私が考えることができる他の方法は、i 番目のスレッドが i 番目のオブジェクトを使用するように、これらのオブジェクトの配列を使用することです。私は以前にこれらを実装していなかったので、2 つのうちのいずれかが優れているかどうか、または物事を成し遂げるためのより良い方法があるかどうか疑問に思っていました。
3 つ目の方法は、単一の cl_object にミューテックスを使用し、それをイベント ハンドラーに関連付けることです。その後、スレッドはイベントが終了するまで待機できます。マルチスレッドの状況でこれが機能するかどうかはわかりません...