【发布时间】:2016-11-19 20:10:37
【问题描述】:
我在这里看到了一些关于 Stack Overflow 处理相同问题的问题,但没有明确的答案。我想我会再问一遍,带着一堆我自己的问题。都与手头的主题有关。
那么,我们知道数据从主机传输到 openCL 设备的时间吗?能否告诉我以下函数的确切内存传输操作(即调用这些函数时,传输或创建了哪些数据?):
clCreateBuffer()
clSetKernelArg()
clEnqueueNDRangeKernel()
前两个甚至不产生事件,所以我们无法对它们进行计时,但这里肯定发生了一些数据传输。
有没有一种方法可以在不先将其设置为内核参数的情况下将数据传输到设备?
似乎(根据我自己的初步测试)使用CL_MEM_USE_HOST_PTR 创建的mem 对象直接被设备操作。为什么不希望这样做,因为这样,我们可以避免进一步的数据传输命令(当然驱动程序以最有效的方式实现了这一点)?
在内核返回后,传输的数据(例如,作为内核参数的一部分)是否会留在设备上以供进一步操作?如果没有,有没有办法做到这一点?
【问题讨论】: