【CUDA】マルチGPUで高速化しよう

C++

処理性能を上げるためマルチGPU化したい場合、次の方法で使用するGPUを指定することができます。

コード

コードは以下の通り。
引数のデバイスのIDは「0~GPU接続数-1」の範囲です。

GPUの接続数は以下のように取得。

注意点

スレッドを分ける

cudaSetDeviceで別々のデバイスを指定するとき、別々のスレッドで呼ぶ必要があります。

つまり、次のように同じスレッド内で順にデバイスを指定してもうまくいきません。

PCI-expressの速度

マザーボードにもよりますが、GPUを二枚指すと、それぞれx16とx8で動作したり、一方の転送速度は落ちることがあります。

大体、次の様になるはずです。

PCI-express x16 転送速度: 理論値 16GB/sec 実際 11GB/secぐらい
PCI-express x8 転送速度: 理論値 8GB/sec 実際 5GB/secぐらい

思ったよりも遅いと思ったらNsightのタイムラインで調べてみましょう。

マウスコンピューター/G-Tune