是否有一种方法可以在两个独立的OpenCL程序之间共享GPU,或者更具体地说,在两个单独的进程之间共享同时都要求GPU执行OpenCL内核?如果是这样,这是怎么做到的?
答案 0 :(得分:4)
这取决于你所谓的分享。
通常,您可以在同一GPU上创建两个都创建OpenCL设备的进程。然后,驱动程序/ OS / GPU有责任确保工作正常。
也就是说,大多数实现都会对GPU执行进行时间分片以实现(就像图形一样)。
我觉得这并不是你所追求的。你能用一个用例扩展你的问题吗?
答案 1 :(得分:4)
当前的GPU(NVidia的Fermi除外)不支持同时执行多个内核。此外,到目前为止,GPU不支持抢占式多任务处理;它是完全合作的!内核的执行无法暂停并在以后继续执行。因此,任何基于时间的GPU共享的粒度取决于内核的执行时间。
如果您有多个需要GPU访问的程序运行,那么您应该确保您的内核具有较短的运行时间(<100ms是经验法则),以便GPU时间可以在需要GPU周期的内核之间进行时间分割。这样做也很重要,否则主机系统的图形将变得非常无响应,因为它们也需要GPU访问。这可以说无限或长循环中的内核显然会使系统崩溃。