1

PyCUDA,尽管有很多缺点,但通常会提供非常好的示例/可从 wiki 下载。但是我在示例或文档(或粗略的谷歌搜索)中找不到任何东西,展示了 PyCUDA 将工作负载动态分配给多个设备的方式。

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

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

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

4

1 回答 1

2

Pycuda 没有任何内在的多 GPU 支持,因为 CUDA 也没有任何内在的多 GPU 支持。这将在 CUDA 4.0 中发生变化,因为 API 已更改为线程安全和多 GPU 感知。但是 Pycuda 还没有对 AFAIK 的支持。即使它来了,也必须明确管理每个设备,并由您分配工作量。没有自动工作负载分配或类似的东西。

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

于 2011-04-27T21:14:34.003 回答