CPU-GPU并行编程(Python)

时间:2019-10-29 09:39:00

标签: python-3.x numba

有没有一种方法可以同时在CPU和GPU上运行功能(使用Python)?我已经在使用Numba对GPU上的计算密集型功能进行线程级调度,但是现在我还需要在CPU-GPU之间添加并行性。一旦确保GPU共享内存具有开始处理的所有数据,就需要触发GPU启动,然后使用CPU在主机上并行运行某些功能。

我确定GPU返回数据所花费的时间比CPU完成任务所需的时间长得多。因此,一旦GPU完成处理,CPU就已经在等待将数据提取到主机。是否有标准的库/方法来实现这一目标?感谢有关这方面的任何指示。

1 个答案:

答案 0 :(得分:0)

感谢罗伯特和安德。我在想类似的思路,但不是很确定。我检查了一下,直到在内核之间进行一些同步以完成任务为止(例如使用CuPy时,例如cp.cuda.Device()。synchronize()),我实际上是在并行运行GPU-CPU。再次感谢。 Numba的一般流程是使 gpu_function cpu_function 并行运行,如下所示:

    """ GPU has buffer full to start processing Frame N-1 """
    tmp_gpu = cp.asarray(tmp_cpu)
    gpu_function(tmp_gpu)
    """ CPU receives Frame N over TCP socket """
    tmp_cpu = cpu_function()
    """ For instance we know cpu_function takes [a little] longer than gpu_function """
     cp.cuda.Device().synchronize()

当然,我们甚至可以通过使用PING-PONG缓冲区和初始帧延迟来消除将tmp_cpu传输到tmp_gpu所花费的时间。

相关问题