【发布时间】:2018-04-21 07:12:56
【问题描述】:
我正在学习 OpenCL,我听说有可能在 GPU 上共同计算并同时复制数据。我有这样的想法:
queue.enqueueNDRangeKernel(ker, cl::NullRange, cl::NDRange(1024*1024));
queue.enqueueReadBuffer(buff, true, 0, 1024*1024, &buffer[0]);
我能以某种方式立即执行那里的操作吗?在执行具有更高索引的内核时将第一个结果复制回 CPU?
我想做这样的事情:
for(int i=0; i<1024; ++i){
queue.enqueueNDRangeKernel(ker, cl::Range(i*1024), cl::NDRange(1024));
queue.enqueueReadBuffer(buff, true, i*1024, 1024, &buffer[i*1024]);
}
但是要异步执行内核和读取。这样的事情可能吗?两个队列和内核完成事件是正确的解决方案吗?
感谢您的宝贵时间。
【问题讨论】: