【发布时间】:2018-07-11 06:27:57
【问题描述】:
创建 OpenCL 缓冲区后,我们需要在主机端映射它,填充所需的数据并取消映射,以便内核可以使用它。对于只读的 OpenCL 缓冲区,是否可以在主机端和内核端同时使用它?
【问题讨论】:
-
想知道用例是什么,如果您在主机上填充数据,那么您已经在主机上拥有所需的数据。如果它是只读的,您可以只拥有一个副本。
标签: opencl
创建 OpenCL 缓冲区后,我们需要在主机端映射它,填充所需的数据并取消映射,以便内核可以使用它。对于只读的 OpenCL 缓冲区,是否可以在主机端和内核端同时使用它?
【问题讨论】:
标签: opencl
不,如果您使用的是地图/取消地图,则不是。 unmap后主机内存范围的内容无效。也许您可以改用 clEnqueueWriteBuffer,然后您用作源的主机内存仍然是您可以在主机端使用的主机内存。
【讨论】:
再一次,不是普通的记忆。通常,您可以在 GPU 和 CPU 之间同时共享内存,甚至进行通信。查看Shared Virtual Memory(AMD 和Intel)。
非标准 CPU/GPU 通信非常罕见,因为人们无法假设 ND 范围执行的顺序是什么。实现可以按照它想要的任何顺序调度它们。因此,如果缓冲区的内容随着内核分派新的工作组而发生变化,您将无法控制数据流序列。
确实存在内核继续运行(就像处理流一样)的“持久内核”等罕见异常,但我对此知之甚少。
【讨论】: