我想在两个独立的 Linux 进程之间传递 Cuda 上下文(使用我已经设置的 POSIX 消息队列)。
Using cuCtxPopCurrent()
and cuCtxPushCurrent()
,我可以获得上下文指针,但是这个指针是在我调用该函数的进程的内存中引用的,在进程之间传递它是没有意义的。
我正在寻找其他解决方案。到目前为止我的想法是:
- 尝试深度复制
CUcontext
struct,然后传递副本。
- 看看我是否可以找到一个共享内存解决方案,其中我的所有 Cuda 指针都放置在那里,以便两个进程都可以访问它们。
- 将进程合并为一个程序。
- Cuda 4.0 中可能有更好的上下文共享,我可以切换到它。
我不确定选项(1)是否可行,也不确定选项(2)是否可用或可能。如果我想让事情变得通用(这是在劫持垫片内),(3)并不是真正的选择。 (4) 我会看看 Cuda 4.0,但我也不确定它是否能在那里工作。
Thanks!
一句话,不。上下文隐式地与创建它们的线程和应用程序相关联。单独的应用程序之间不存在可移植性。这与 OpenGL 和各种版本的 Direct3D 几乎相同 - 不支持在应用程序之间共享内存。
CUDA 4 使 API 线程安全,以便单个主机线程可以同时保存超过 1 个上下文(即超过 1 个 GPU),并使用规范的设备选择 API 来选择它正在使用的 GPU。如果我正确理解你的问题/应用程序,这在这里没有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)