1

PyCUDAには、そのすべての欠点がありますが、通常、非常に優れた例が提供されており、wikiからダウンロードできます。しかし、複数のデバイスにワークロードを動的に割り当てるPyCUDAの方法を示す例やドキュメント(または大まかなグーグル検索)には何も見つかりませんでした。

誰かが私が何をすべきかについて私にヒントを与えるか、私に例を示すことができますか?

私の頭に浮かんだアイデアの1つは、マルチプロセッシングを使用して、それぞれが1つのデバイスに関連付けられたN個のプロセスのプールを生成し、クラスが呼び出されたときです(すべてのGPU関数は別のクラスにありますが、おそらく最良のアイデアではありませんが、動作します)それはラウンドロビンのマルチプロセスです。これはどれくらい良い/遅れたアイデアですか?

PS私の開発マシンは1GPUで、テストマシンは4 GPUであるため、動的な数のデバイスを処理できるソリューションが必要です(異なるコンピューティング機能であることも役に立ちませんが、それが寿命です)

4

1 に答える 1

2

CUDAにも固有のマルチGPUサポートがないため、Pycudaには固有のマルチGPUサポートがありません。APIがスレッドセーフでマルチGPUに対応するように変更されたため、これはCUDA4.0で変更されます。しかし、PycudaはまだAFAIKをサポートしていません。それが起こったとしても、各デバイスは明示的に管理され、ワー​​クロードはあなたによって分割される必要があります。自動ワークロード分散などはありません。

マルチGPUの場合、私は通常mpi4pyを使用しました。マルチスレッドのPythonスキームを使用して、各スレッドがPycudaで個別のコンテキストを開く可能性があります。何が最適に機能するかは、おそらくデバイス間で必要な通信量によって異なります。

于 2011-04-27T21:14:34.003 に答える