【问题标题】:Is it possible to share a Cuda context between applications?是否可以在应用程序之间共享 Cuda 上下文?
【发布时间】:2011-08-29 00:35:50
【问题描述】:

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

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

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

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

我不确定选项 (1) 是否可行,也不确定 (2) 是否可用或可能。 (3) 如果我想让事情变得通用(这是在劫持垫片中),那并不是一个真正的选择。 (4) 我会看看 Cuda 4.0,但我不确定它是否也能在那里工作。

谢谢!

【问题讨论】:

    标签: linux cuda gpu interprocess cuda-context


    【解决方案1】:

    总之,没有。上下文隐式绑定到创建它们的线程和应用程序。不同的应用程序之间没有可移植性。这与 OpenGL 和各种版本的 Direct3D 几乎相同 - 不支持在应用程序之间共享内存。

    CUDA 4 使 API 线程安全,因此单个主机线程可以同时保存超过 1 个上下文(即超过 1 个 GPU),并使用规范的设备选择 API 来选择它正在使用的 GPU。如果我正确理解您的问题/申请,这将无济于事。

    【讨论】:

    • 知道了——谢谢!我必须弄清楚如何合并我的应用程序,或者让一个人处理 Cuda 调用。
    猜你喜欢
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多