Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencl 启动内核后主机上的执行流_Opencl - Fatal编程技术网

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

Opencl 启动内核后主机上的执行流,opencl,Opencl,我有几个问题需要澄清。。抱歉,如果它们看起来很基本 当我们使用ClenqueueEndRangeKernel启动内核时,主机代码会发生什么变化,它是等待内核完成还是 假设我们有多个内核,在这种情况下会发生什么?如果其中一个内核已经完成,那么当其他内核仍在进行计算时,主机是否可以从该内核检索结果 我正在阅读clCreateBuffer()的OpenCL规范。检查标志CL_MEM_USE_HOST_PTR的说明。为方便起见,我已将其张贴在此处: “它表示应用程序希望OpenCL实现使用主机ptr引用

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

  • 当我们使用ClenqueueEndRangeKernel启动内核时,主机代码会发生什么变化,它是等待内核完成还是

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

  • 我正在阅读clCreateBuffer()的OpenCL规范。检查标志CL_MEM_USE_HOST_PTR的说明。为方便起见,我已将其张贴在此处: “它表示应用程序希望OpenCL实现使用主机ptr引用的内存作为内存对象的存储位。”

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

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

  • 如果多个内核属于同一个命令队列,那么它们将按照与排队相同的顺序顺序执行

  • 应用程序是指在主机上运行的代码。OpenCL实现是一个实现OpenCL接口的库。有几种OpenCL实现,如AMD、NVidia等


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

    对于第2点:保证按顺序执行,除非命令队列是使用CL\U queue\U OUT\U OF order\U EXEC\U MODE\U ENABLE创建的。谢谢。所以,如果我在NDRangeKernel之后有一个clenqueueredbuffer,并且我没有等待任何事件。此外,clEnqueueReadBuffer也是异步的,即不等待指定的事件。那么在这种情况下,clEnqueueReadBuffer将如何执行。。它是否开始以增量方式读取数据,即读取已由内核处理的数据,如果内核处理并提供更多数据,它是否继续以类似方式读取??对于第2点:什么足以同时启动所有内核,只有单独的命令队列或所有上下文、程序。。etc对于每个内核都必须是独立的?通常您将多个命令排队到同一个命令队列中,然后等待最后一个命令。在下一个排队命令启动之前,clEnqueueReadBuffer将整个缓冲区读取到CPU。几个命令队列对于不相关的任务是有意义的。一个命令队列可用于对某些内存对象(例如图像)的后续操作。