カーネルの呼び出しに問題があります。私のコードは次のようになります。
std::vector<cl::Event> events;
...
queue.enqueueWriteBuffer(arrayFirst, CL_FALSE, 0, sizeOfArray, NULL, NULL, &arrayEvent);
events.push_back(arrayEvent);
queue.enqueueWriteBuffer(arraySecond, CL_FALSE, 0, sizeOfArraySecond, this->arraySecond, NULL, &arraySecondEvent);
events.push_back(arraySecondEvent);
kernel(cl::EnqueueArgs(queue, events, cl::NDRange(512), cl::NDRange(128)), arrayFirst, arraySecond);
そして、それを実行すると、カーネルコード内には入りませんが、「make_kernel」の呼び出しを次のように変更すると:
kernel(cl::EnqueueArgs(queue, arraySecondEvent, cl::NDRange(512), cl::NDRange(128)), arrayFirst, arraySecond);
カーネル内に入りますが、「arrayFirst」のメモリが正しく割り当てられているかどうかはわかりません。OpenCl 1.2 Wrapper のドキュメントを確認したところ、呼び出しは次のようになっていることがわかりました。
cl::EnqueueArgs::EnqueueArgs(CommandQueue &queue,
const VECTOR_CLASS<Event> &events, NDRange offset, NDRange global,
NDRange local) //page 42
しかし、イベントベクターのアドレスを渡そうとすると、次の引数を持つ適切なメソッドがないというコンパイルエラーが発生します..
エラー:
error: no instance of constructor "cl::EnqueueArgs::EnqueueArgs" matches the argument list
argument types are: (cl::CommandQueue, std::vector<cl::Event, std::allocator<cl::Event>> *, cl::NDRange, cl::NDRange)
valueOfImageKernel(cl::EnqueueArgs(valueOfImageQueue, &events, cl::NDRange(512), cl::NDRange(128)),
誰が私が間違っているのか分かりますか?