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

5
我想在两个独立的Linux进程之间传递Cuda上下文(使用我已经设置的POSIX消息队列)。使用cuCtxPopCurrent()和cuCtxPushCurrent(),我可以获取上下文指针,但是该指针是在调用函数的进程的内存中引用的,并且在进程之间进行传递毫无意义。我正在寻找其他解决方案,我的想法如下:
  1. 尝试深拷贝CUcontext结构,然后传递副本。
  2. 看看是否能找到共享内存解决方案,在其中放置所有Cuda指针,以便两个进程都可以访问它们。
  3. 将进程合并为一个程序。
  4. 可能在Cuda 4.0中有更好的上下文共享方式,我可以切换到该版本。
我不确定选项1是否可行,也不确定选项2是否可用或可行。如果我想使事情更通用,则选项3并不是一个选择(这是在劫持shim内部)。我会查看Cuda 4.0,但我不确定它是否在那里工作。谢谢!
1个回答

3
总的来说,不行。上下文与创建它们的线程和应用程序隐式绑定在一起。在不同应用程序之间没有可移植性。这在OpenGL和各个版本的Direct3D中也基本相同 - 不支持在应用程序之间共享内存。
CUDA 4使API线程安全,因此单个主机线程可以同时持有多个上下文(即多个GPU),并使用规范设备选择API选择要使用的GPU。如果我正确理解您的问题/应用程序,那么这对您没有帮助。

明白了,谢谢!我得想办法合并我的应用程序,或者让一个应用程序来处理Cuda调用。 - Chris Gregg

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