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

Chr*_*egg 5 linux cuda gpu interprocess

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

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

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

  1. 尝试深层复制该CUcontext结构,然后再传递副本。
  2. 看看我是否能找到一个共享内存解决方案,其中所有的Cuda指针都放在那里,以便两个进程都可以访问它们。
  3. 将流程合并到一个程序中。
  4. 我可能会切换到Cuda 4.0中更好的上下文共享。

我不确定选项(1)是否可行,也不确定(2)是否可用。(3)如果我想使事物通用(这是在劫持垫片中),则不是真正的选择。(4)我将看一下Cuda 4.0,但我不确定它是否也可以在那儿工作。

谢谢!

tal*_*ies 3

一句话,不。上下文隐式地与创建它们的线程和应用程序相关联。单独的应用程序之间不存在可移植性。这与 OpenGL 和各种版本的 Direct3D 几乎相同 - 不支持在应用程序之间共享内存。

CUDA 4 使 API 线程安全,以便单个主机线程可以同时保存超过 1 个上下文(即超过 1 个 GPU),并使用规范的设备选择 API 来选择它正在使用的 GPU。如果我正确理解你的问题/应用程序,这在这里没有帮助。