是否有一种方法可以在两个独立的OpenCL程序之间共享GPU,或更具体地说,在两个需要GPU同时执行OpenCL内核的独立进程之间共享GPU?如果有,那么如何实现呢?
是否有一种方法可以在两个独立的OpenCL程序之间共享GPU,或更具体地说,在两个需要GPU同时执行OpenCL内核的独立进程之间共享GPU?如果有,那么如何实现呢?
这要看你所说的“共享”是指什么。
通常情况下,您可以创建两个进程,它们都在同一GPU上创建一个OpenCL设备。然后由驱动程序/操作系统/GPU负责确保一切正常运行。
尽管如此,大多数实现都会对GPU执行进行时间分片以使其发生(就像图形处理一样)。
不过我感觉这可能并不完全符合您的需求。您能否提供一个用例来详细说明您的问题?
目前的GPU(除了Nvidia的Fermi)不支持同时执行多个内核。此外,到目前为止,GPU不支持抢占式多任务处理;它完全是合作的!一个内核的执行不能被暂停并在以后继续执行。因此,任何基于时间的GPU共享的粒度取决于内核的执行时间。
如果您运行多个需要GPU访问的程序,则应确保您的内核具有较短的运行时间(<100ms是经验法则),以便GPU时间可以在需要GPU周期的内核之间进行时间分配。这也很重要,否则主机系统的图形将变得非常不响应,因为它们也需要GPU访问。这甚至可能导致一个无限或长时间循环的内核似乎会使系统崩溃。