質問

ピカダは、そのすべての障害について、通常、Wikiからダウンロード可能で提供される非常に良い例を持っています。しかし、例やドキュメント(またはGoogle検索の大まかな検索)には、複数のデバイスにワークロードをダーミーに割り当てるPycudaの方法を示すものは何も見つかりませんでした。

誰かが私がやるべきことに私をほのめかしたり、例を指したりすることができますか?

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

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

役に立ちましたか?

解決

CUDAには本質的な複数GPUサポートもなかったため、Pycudaには本質的な複数GPUサポートはありませんでした。これは、APIがスレッドセーフでマルチGPUを認識するように変更されたため、CUDA 4.0で変更されます。しかし、ピクーダはまだそのサポートAFAIKを持っていません。それが来たとしても、各デバイスを明示的に管理する必要があり、ワークロードをあなたによって分割する必要があります。自動ワークロード分布などはありません。

Multi-GPUには、通常MPI4PYを使用しています。マルチスレッドPythonスキームを使用する可能性があり、各スレッドがPycudaで別のコンテキストを開いています。最適なものは、おそらくデバイス間で必要な通信の量に依存します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top