Pycuda尽管有所有的缺点,但通常在Wiki中提供了非常好的示例 /可下载的示例。但是我在示例或文档中找不到任何东西(或粗略的Google搜索),证明了将工作负载分配给多个设备的Pycuda方式。

谁能暗示我要做我应该做的事情,或者指出我的例子?

突然出现在我脑海中的一个想法是使用多处理,生成一个n个进程池,每个过程都绑在一个设备上,然后当该类被调用时(我在单独的类中都有所有的GPU功能;可能不是最好的主意,但是它作品)它圆形旋转的“多进程”。这是一个好 /智障的想法?

PS我的开发机器是1 GPU,在4 GPU中我的测试机,因此我需要任何解决方案才能处理动态数量的设备(也没有帮助它们是不同的计算功能,但是这就是生活)

有帮助吗?

解决方案

Pycuda没有任何内在的多GPU支持,因为CUDA也没有任何内在的多GPU支持。这将在CUDA 4.0中更改,因为API已更改为线程安全且多GPU。但是Pycuda还没有支持Afaik。即使到了,每个设备也必须明确管理,并且工作负载由您划分。没有自动工作负载分配或类似的东西。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top