我有几个问题,我需要澄清一下......对不起,如果它们看起来非常基本。
当我们使用clEnqueueNDRangeKernel启动内核时,主机代码实际发生了什么,是等待内核完成还是......?
假设我们有多个内核,在这种情况下会发生什么?如果其中一个内核已经完成,主机是否可以从该内核检索结果,而其他内核仍在进行计算。
我正在阅读clCreateBuffer(link here)的OpenCL规范。检查标志CL_MEM_USE_HOST_PTR的描述。为了您的方便,我在这里发布: “它表示应用程序希望OpenCL实现使用host_ptr引用的内存作为内存对象的存储位。”
我无法通过“应用程序”和“opencl实现”获得它们的含义。此外,它还说“允许OpenCL实现缓存缓冲区内容。”
答案 0 :(得分:1)
内核模块以异步方式排队并执行,clEnqueueNDRangeKernel立即返回,主机程序继续执行。要使此调用同步,请等待最后一个可选参数的事件,或调用clFinish等待所有排队的命令。
如果多个内核属于同一个命令队列,则它们按照排队顺序依次执行。
应用程序表示您的代码在主机上运行。 OpenCL实现是一个实现OpenCL接口的库。有几个OpenCL实现,如AMD,NVidia等。
OpenCL程序包含三个组件:在CPU中运行的主机代码,OpenCL库(实现)和在GPU中运行的内核模块。