我在 Snapdragon 800 平台上使用 OpenCL
。由于 GPU 内存是共享的,我可以将内存缓冲区映射到主内存中,并可以直接在其上写入。这避免了 GPU 和 RAM 之间的内存复制。
我想知道,我是否可以使用 CPU 写入映射内存并同时执行其他命令队列中的其他 OpenCL
程序。
如果您想了解一些背景知识,请继续阅读:
我正在使用网络摄像头来捕获图像,网络摄像头库有一个像 getImage() 这样的函数。只要有新帧,该函数就会阻止执行。对于 30 fps,最坏情况下为 33 毫秒。在此期间,我的缓冲区被映射,因为 OpenCL 给了我一个指针,我必须将该指针转发到网络摄像头库。调用完成后,我可以取消映射 OpenCL 缓冲区。
我在 GPU
上实现了高级图像处理算法,但并非所有算法都使用映射缓冲区。
最佳答案
虽然缓冲区已映射,但执行使用该缓冲区的任何命令都是无效的。如果您想执行使用不同缓冲区的命令,那没问题。
在 OpenCL 2.0 中,新的共享虚拟内存功能允许您同时从主机和设备访问缓冲区。
关于c - 在 OpenCL 和映射缓冲区中使用多个命令队列。我会遇到冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046111/