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