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

4

有没有人知道,是否可以像OpenGL一样在不同的上下文之间共享OpenCL内存对象?

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

2个回答

2

我不确定这是否可行,但如果像Klee1所说的那样,个部分不可能实现,我建议尝试以下方法:

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

2)在需要在两者之间移动数据时,使用GL进行帧缓冲区传输。

... 这将使数据保持在GPU内,并节省大量时间,而无需在PCI-E总线上双向复制数据....


0

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

如果您想执行此类型的计算,您首先需要将数据从一个上下文复制到另一个上下文。可以按照以下步骤完成:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接