【问题标题】:Sharing the GPU between OpenCL capable programs在支持 OpenCL 的程序之间共享 GPU
【发布时间】:2011-03-22 16:59:33
【问题描述】:

有没有一种方法可以在两个独立的支持 OpenCL 的程序之间共享 GPU,或者更具体地说,在两个独立的进程之间共享 GPU,同时都需要 GPU 执行 OpenCL 内核?如果是这样,这是如何完成的?

【问题讨论】:

    标签: opencl


    【解决方案1】:

    当前的 GPU(NVidia 的 Fermi 除外)不支持同时执行多个内核。此外,到目前为止,GPU 还不支持抢占式多任务处理;这是完全合作的!内核的执行不能暂停并在以后继续。因此,任何基于时间的 GPU 共享的粒度都取决于内核的执行时间。

    如果您有多个需要 GPU 访问的程序正在运行,那么您应该确保您的内核具有较短的运行时间(经验法则是

    【讨论】:

      【解决方案2】:

      这取决于你所说的共享。

      一般来说,您可以在同一个 GPU 上创建 2 个创建 OpenCL 设备的进程。然后,驱动程序/操作系统/GPU 有责任确保一切正常运行。

      也就是说,大多数实现都会对 GPU 执行进行时间切片以实现这一点(就像它发生在图形上一样)。

      我感觉这并不是你所追求的。你能用一个用例来扩展你的问题吗?

      【讨论】:

      • 用例将是一个使用 OpenCL 的单个进程来长时间使用 GPU。如果启动了另一个同样需要 GPU 的 OpenCL 进程,如何处理?您的回答表明驱动程序将进行时间切片,即在任何给定时间将整个 GPU 分配给一个进程。考虑到与每个进程关联的数据必须在设备和主机之间来回复制,这肯定是低效的吗?
      • @Chris:简短的回答是不需要复制所有数据。执行是按时间分片的,但如果两者都适合卡,内存可以保持共享(内存是“虚拟化的”。请参见下面的 URL)。如果它确实适合,那么它肯定会复制数据。时间片的粒度也很粗。假设我们谈论的是 Windows,在 WDDM 1.1 中,CL 内核运行永远不会被中断,等等。请参阅en.wikipedia.org/wiki/Windows_Display_Driver_Model 了解更多信息。
      • 这个ppt真的很有趣。 Linux下如何实现更细粒度的时间切片?
      • @Chris:不知道。但可以肯定的是,GPU 硬件,至少到当前这一代,还没有真正支持任意时间切片(Fermi 可能是一个例外,不确定)。所以操作系统不能提供硬件不支持的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多