启动内核后主机上的执行流程

时间:2012-07-12 07:14:13

标签: opencl

我有几个问题,我需要澄清一下......对不起,如果它们看起来非常基本。

  1. 当我们使用clEnqueueNDRangeKernel启动内核时,主机代码实际发生了什么,是等待内核完成还是......?

  2. 假设我们有多个内核,在这种情况下会发生什么?如果其中一个内核已经完成,主机是否可以从该内核检索结果,而其他内核仍在进行计算。

  3. 我正在阅读clCreateBuffer(link here)的OpenCL规范。检查标志CL_MEM_USE_HOST_PTR的描述。为了您的方便,我在这里发布: “它表示应用程序希望OpenCL实现使用host_ptr引用的内存作为内存对象的存储位。”

  4. 我无法通过“应用程序”和“opencl实现”获得它们的含义。此外,它还说“允许OpenCL实现缓存缓冲区内容。”

1 个答案:

答案 0 :(得分:1)

  1. 内核模块以异步方式排队并执行,clEnqueueNDRangeKernel立即返回,主机程序继续执行。要使此调用同步,请等待最后一个可选参数的事件,或调用clFinish等待所有排队的命令。

  2. 如果多个内核属于同一个命令队列,则它们按照排队顺序依次执行。

  3. 应用程序表示您的代码在主机上运行。 OpenCL实现是一个实现OpenCL接口的库。有几个OpenCL实现,如AMD,NVidia等。

  4. OpenCL程序包含三个组件:在CPU中运行的主机代码,OpenCL库(实现)和在GPU中运行的内核模块。