我的內核調用有問題。 我的代碼如下所示:內核不會等待事件
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包裝的文檔,我發現應該是調用看起來是這樣的:
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)),
人有一個想法,我什麼做錯了?
如何使用阻塞寫入(將CL_TRUE傳遞給enqueueWriteBuffer)? – doqtor
我不想使用阻止寫入/讀取,因爲我關心運行時。 – MNie
你的第一個代碼剪斷應該工作。 「它不在內核代碼中」是什麼意思?你怎麼知道?你有任何錯誤,等? – doqtor