CPU-GPU并行编程(Python)
CPU-GPU Parallel programming (Python)
有没有办法可以在 CPU 和 GPU(使用 Python)上同时执行 运行 功能?我已经在使用 Numba 为 GPU 上的计算密集型函数进行线程级调度,但我现在还需要在 CPU-GPU 之间添加并行性。一旦我们确保 GPU 共享内存具有开始处理的所有数据,我需要触发 GPU 启动,然后使用 CPU 在主机上并行 运行 一些函数。
我确信 GPU return 数据所花费的时间远远超过 CPU 完成任务所花费的时间。因此,一旦 GPU 完成处理,CPU 已经在等待将数据提取到主机。有没有标准 library/way 来实现这个?感谢这方面的任何指示。
谢谢罗伯特和安德。我在想类似的路线,但不是很确定。我检查了这一点,直到我在核心之间进行一些同步以完成任务,(例如 cp.cuda.Device().synchronize() 使用 CuPy 时)我有效地 运行ning 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 所花费的时间。
有没有办法可以在 CPU 和 GPU(使用 Python)上同时执行 运行 功能?我已经在使用 Numba 为 GPU 上的计算密集型函数进行线程级调度,但我现在还需要在 CPU-GPU 之间添加并行性。一旦我们确保 GPU 共享内存具有开始处理的所有数据,我需要触发 GPU 启动,然后使用 CPU 在主机上并行 运行 一些函数。
我确信 GPU return 数据所花费的时间远远超过 CPU 完成任务所花费的时间。因此,一旦 GPU 完成处理,CPU 已经在等待将数据提取到主机。有没有标准 library/way 来实现这个?感谢这方面的任何指示。
谢谢罗伯特和安德。我在想类似的路线,但不是很确定。我检查了这一点,直到我在核心之间进行一些同步以完成任务,(例如 cp.cuda.Device().synchronize() 使用 CuPy 时)我有效地 运行ning 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 所花费的时间。