4

有谁知道,是否可以像 opengl 那样在不同的上下文之间共享 opencl 内存对象?

我想将属于不同上下文的两个内存对象传递给内核......

4

2 回答 2

2

我不知道这是否可行,但如果正如 Klee1 所说,一点是不可能的,我可以试试这个:

1) 从一个启用共享的 GL 上下文创建两个 CL 上下文中的每一个,每个 CL 上下文一个内存对象。

2)当你想在两者之间移动数据时,使用 GL 在两者之间进行帧缓冲 blit。

...这会将数据保留在 GPU 中并为您节省大量时间,而不是通过 PCI-E 总线双向复制......

于 2012-10-13T02:14:15.047 回答
0

我认为这不可能直接用 OpenCL 来完成。这是因为在 OpenCL 中定义上下文、队列和内存的方式。如果您从两个不同的上下文传递内存,那么数据很可能在两个不同的设备上,我们不知道要在哪个设备上执行计算。

如果您想执行这种类型的计算,您首先必须将数据从一个上下文复制到另一个上下文。可以这样做:

  1. 在 context2 中创建一个与 context1 中的缓冲区大小相同的新缓冲区
  2. 在主机上创建一个相同大小的本地缓冲区
  3. clEnqueueReadBuffer 从 context1 到本地缓冲区
  4. clEnqueueWriteBuffer 从本地缓冲区到 context2

相反,如果您在不同的命令队列中有两个缓冲区(在相同的上下文中),则可以按照 OpenCL 1.2 规范的第 A.1 节中的规定共享它们。

于 2012-10-08T17:42:09.130 回答