在不同的上下文之间共享OpenCL内存对象

时间:2012-10-08 12:50:20

标签: opencl

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

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

2 个答案:

答案 0 :(得分:2)

我不知道这是否有效,但如果像Klee1所说的那样 位是不可能的,我可以试试这个:

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

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

...这样可以将数据保存在GPU中,从而节省大量时间,而不是通过PCI-E总线双向复制....

答案 1 :(得分:0)

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

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

  1. 在context2中创建一个与context1
  2. 中的缓冲区大小相同的新缓冲区
  3. 在相同大小的主机上创建本地缓冲区
  4. 从context1到本地缓冲区的clEnqueueReadBuffer
  5. clEnqueueWriteBuffer从本地缓冲区到context2
  6. 如果您在不同的命令队列中(在相同的上下文中)有两个缓冲区,则可以按照OpenCL 1.2规范的A.1节中的规定共享它们。