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

在不同上下文之间共享OpenCL内存对象,opencl,Opencl,有人知道吗,有没有可能像opengl那样在不同的上下文之间共享opencl内存对象 我想将两个属于不同上下文的内存对象传递给内核…我认为直接使用OpenCL不可能做到这一点。这是因为在OpenCL中定义上下文、队列和内存的方式。如果从两个不同的上下文传递内存,那么很可能数据在两个不同的设备上,我们不知道在哪个设备上执行计算 如果要执行这种类型的计算,首先必须将数据从一个上下文复制到另一个上下文。可以这样做: 在context2中创建与context1中的缓冲区大小相同的新缓冲区 在相同大小的主机

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


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

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

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

  • 在context2中创建与context1中的缓冲区大小相同的新缓冲区
  • 在相同大小的主机上创建本地缓冲区
  • 从context1到本地缓冲区的clEnqueueReadBuffer
  • clEnqueueWriteBuffer从本地缓冲区到context2

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

    我不知道这是否可行,但如果如Klee1所说,该位不可能,我可以尝试以下方法:

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

    2) 如果要在两者之间移动数据,请使用GL在两者之间执行帧缓冲区blit

    。。。与通过PCI-E总线双向复制数据相比,这将使数据保留在GPU内并节省大量时间