0

我有几个查询需要澄清。抱歉,如果它们看起来很基本。

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

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

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

我无法理解“应用程序”和“opencl 实现”的确切含义。此外,它还说“允许 OpenCL 实现缓存缓冲区内容”。

4

1 回答 1

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

  2. 如果多个内核属于同一个命令队列,它们将按照它们入队的顺序顺序执行。

  3. 应用程序意味着您的代码在主机上运行。OpenCL implementation 是一个实现 OpenCL 接口的库。有几种 OpenCL 实现,例如 AMD、NVidia 等。

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

于 2012-07-12T07:25:30.230 回答