PyCUDA,因为它的所有缺点,通常都有非常好的例子,可以从wiki下载/下载。但是我在示例或文档(或粗略的谷歌搜索)中找不到任何证明PyCUDA方式将工作负载分配给多个设备的方法。
任何人都可以向我暗示我应该做的事情或指出我的例子吗?
突然出现的一个想法是使用多处理,生成N个进程池,每个进程绑定到一个设备,然后调用类时(我将所有的gpu函数放在一个单独的类中;可能不是最好的想法,但它的工作原理)它是循环的多重过程。这个想法有多好/迟钝? PS我的开发机器是1 GPU,我的测试机器是4 GPU,所以我需要任何解决方案才能处理动态数量的设备(它也无助于它们具有不同的计算能力,但是那就是生活)答案 0 :(得分:1)
Pycuda没有任何固有的多GPU支持,因为CUDA还没有任何内在的多GPU支持。这将在CUDA 4.0中发生变化,因为API已更改为线程安全且支持多GPU。但Pycuda还没有那种支持AFAIK。即使它到来,每个设备都必须明确管理,工作量由你划分。没有自动工作负载分配或类似的东西。
对于多GPU,我通常使用mpi4py。您可以使用多线程python方案,每个线程在Pycuda中打开一个单独的上下文。什么最有效可能取决于设备之间需要多少通信。