创建OpenCL缓冲区后,我们需要将其映射到主机端,填充所需的数据并取消映射,以便内核可以使用它。对于只读OpenCL缓冲区,是否可以在主机端和内核端同时使用它?
答案 0 :(得分:0)
否,如果您使用的是地图/取消地图,则不会。取消映射后,主机内存范围的内容无效。也许您可以改用clEnqueueWriteBuffer,然后用作源的主机内存仍然是可以在主机端使用的主机内存。
答案 1 :(得分:0)
同样,不是定期存储。通常,您可以 在GPU和CPU之间同时共享内存,甚至可以进行通信。查看Shared Virtual Memory(AMD和Intel)。
非标准的CPU / GPU通信非常罕见,因为一个简单的事实就是人们无法假设ND范围执行的顺序。实现可以按其期望的任何顺序调度它们。因此,如果缓冲区的内容随着内核调度新的工作组而发生变化,则您将无法控制数据流序列。
确实存在诸如“持久内核”之类的罕见例外,其中内核继续运行(就像处理流一样),但是我对此知之甚少。