複数の CUDA デバイスに分割したいという問題がありますが、現在のシステム アーキテクチャが妨げになっていると思われます。
私がセットアップしたのは、GPU 上で操作を実行する関数を備えた GPU クラスです (奇妙なことです)。これらの操作はスタイルのものです
for iteration in range(maxval):
result[iteration]=gpuinstance.gpufunction(arguments,iteration)
N個のデバイスに対してN個のgpuインスタンスがあると想像していましたが、これを適用して各デバイスが非同期に割り当てられるようにする最も簡単な方法を確認するには、マルチプロセッシングについて十分に知りません。処理後の照合結果の具体的なデモンストレーション。
誰かがこの分野の指針を教えてもらえますか?
更新 マルチプロセッシング領域に関するガイダンスを提供してくれた Kaloyan に感謝します。CUDA が特に問題になっていなければ、回答済みとしてマークします。ごめん。
以前、この実装で遊んでいた gpuinstance クラスは CUDA デバイスを開始しましたが、(正しくスコープされた) 各スレッドが cuda コマンドに遭遇するとすぐにエラーをimport pycuda.autoinit
スローして、うまくいかなかったようです。次に、クラスinvalid context
のコンストラクターで手動で初期化を試みました...__init__
pycuda.driver.init()
self.mydev=pycuda.driver.Device(devid) #this is passed at instantiation of class
self.ctx=self.mydev.make_context()
self.ctx.push()
ここでの私の仮定は、gpuinstances のリストが作成されてからスレッドがそれらを使用するまでの間、コンテキストが保持されているため、各デバイスは独自のコンテキストで適切に配置されているということです。
(pop/detach
クリーンアップを処理するためにデストラクタも実装しました)
問題は、invalid context
スレッドが CUDA に触れようとするとすぐに例外が表示されることです。
アイデアはありますか?そして、ここまで来れたおかげです。回答に「バナナ」を使用している人々に自動的に賛成票を投じます! :P