是否可以在应用程序之间共享Cuda上下文?

我想在两个独立的Linux进程(使用POSIX消息队列,我已经设置)之间传递Cuda环境。

使用cuCtxPopCurrent()cuCtxPushCurrent() ,我可以得到上下文指针,但是这个指针在我调用该函数的进程的内存中被引用,并且在进程之间传递是没有意义的。

我正在寻找其他解决scheme。 我到目前为止的想法是:

  1. 尝试深层复制CUcontext结构,然后传递副本。
  2. 看看我能否find一个共享内存的解决scheme,我的Cuda指针都放在那里,这样两个进程都可以访问它们。
  3. 将这些stream程合并成一个程序。
  4. 在Cuda 4.0中,我可以切换到更好的上下文共享。

我不确定选项(1)是否可能,也不能确定(2)是否可用。 (3)如果我想把东西变成通用的(这是在一个劫持垫片内),它并不是一个真正的select。 (4)我会看Cuda 4.0,但我不确定它是否能在那里工作。

谢谢!

Solutions Collecting From Web of "是否可以在应用程序之间共享Cuda上下文?"

总之,没有。 上下文隐含地绑定到创建它们的线程和应用程序。 单独的应用程序之间没有可移植性。 这与OpenGL和Direct3D的各种版本非常相似,不支持在应用程序之间共享内存。

CUDA 4使API线程安全,因此单个主机线程可以同时容纳多于一个的上下文(即多于一个GPU),并使用规范的设备选择API来选择正在使用的GPU。 如果我正确地理解你的问题/应用,这在这里没有帮助。