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



PyCUDA,尽管有它所有的缺点,通常有非常好的例子提供/从wiki下载。但我在示例或文档(或粗略的google搜索)中找不到任何演示PyCUDA动态分配工作负载到多个设备的方法。

谁能给我提示一下我应该做什么或给我举个例子?

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

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

Pycuda没有任何内在的多gpu支持,因为CUDA也没有任何内在的多gpu支持。这将在CUDA 4.0中改变,因为API已被更改为线程安全和多gpu感知。但Pycuda目前还没有这种支持。即使是这样,每个设备也必须被明确地管理,并且工作量由你来分配。没有自动工作负载分配或类似的东西。

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

相关内容

  • 没有找到相关文章

最新更新