【发布时间】:2019-04-02 05:22:03
【问题描述】:
我正在尝试将 CUDA 测试移植到 Opencl。它需要从 PCIe 设备 1 到相同类型(相同品牌、相同驱动程序等)的设备 2 上的缓冲区副本
在 CUDA 中非常简单:在设备 1 和设备 2 上分配内存并复制
在 Opencl 中: 1. 使用两个设备创建一个上下文 2. 在上下文中分配内存并使用 migrateMemObject 将其与 device-1 关联。对设备 2 重复相同的操作
创建队列时,我需要指定上下文和设备。因此队列只能与设备关联,因此只能访问与该设备关联的内存(?)
有没有办法让2台设备使用一个队列?
- 或者有什么方法可以从与 device1 关联的 gfx-mem 复制到与 device2 关联的 gfx-mem 而无需复制到主内存?
感谢您的帮助!
【问题讨论】:
-
只有amd才有,有clEnqueueMakeBuffersResidentAMD。只有nvidia,你可以再次使用CUDA,只是为了通信卡,反正它是硬件依赖的,违背了OpenCL的目的。要以锁步方式使用 2 个队列,您应该尝试在两个队列上使用事件,以便它们相互依赖。您可以将数据命令分别提供给两者,但仅使用事件运行内核以使它们同时运行或类似的东西。
标签: queue opencl bandwidth migrate