PyCUDA;如何动态地将工作负载分配给多个设备

时间:2011-04-27 20:50:03

标签: python cuda gpgpu pycuda multi-gpu

PyCUDA,因为它的所有缺点,通常都有非常好的例子,可以从wiki下载/下载。但是我在示例或文档(或粗略的谷歌搜索)中找不到任何证明PyCUDA方式将工作负载分配给多个设备的方法。

任何人都可以向我暗示我应该做的事情或指出我的例子吗?

突然出现的一个想法是使用多处理,生成N个进程池,每个进程绑定到一个设备,然后调用类时(我将所有的gpu函数放在一个单独的类中;可能不是最好的想法,但它的工作原理)它是循环的多重过程。这个想法有多好/迟钝?

PS我的开发机器是1 GPU,我的测试机器是4 GPU,所以我需要任何解决方案才能处理动态数量的设备(它也无助于它们具有不同的计算能力,但是那就是生活)

1 个答案:

答案 0 :(得分:1)

Pycuda没有任何固有的多GPU支持,因为CUDA还没有任何内在的多GPU支持。这将在CUDA 4.0中发生变化,因为API已更改为线程安全且支持多GPU。但Pycuda还没有那种支持AFAIK。即使它到来,每个设备都必须明确管理,工作量由你划分。没有自动工作负载分配或类似的东西。

对于多GPU,我通常使用mpi4py。您可以使用多线程python方案,每个线程在Pycuda中打开一个单独的上下文。什么最有效可能取决于设备之间需要多少通信。