2 つの GTX 590 カード (4 つの GPU) を搭載した Linux ボックスがあります。CUDA 4.0 ドライバーを使用すると、GPUDirect メモリ アクセスを呼び出して、4 つの GPU の可能なすべてのペア間でコピーが成功したことを確認できます。
しかし、CUDA 4.1 ドライバー (またはそれ以降のドライバー) にアップグレードした後、GPUDirect アクセス ペアが制限されます。
たとえば、ピアツーピアは、CUDA 4.0 の下で次の間で有効になります。
GPU0 <-> GPU1
GPU0 <-> GPU2
GPU0 <-> GPU3
GPU1 <-> GPU2
GPU1 <-> GPU3
GPU2 <-> GPU3
しかし、CUDA 4.1 (またはそれ以降) では、次の間のみのアクセスに制限されています。
GPU0 <-> GPU1 (同じカード)
GPU2 <-> GPU3 (同じカード)
GPU1 <-> GPU3
最新の CUDA 5.x ドライバーを使用する場合、誰かがこれを説明したり、回避策を知ったりできますか?
$ lspci -tv (興味深い部分):
-[0000:00]-+-00.0 ATI Technologies Inc RD890 Northbridge only single slot PCI-e GFX Hydra part
+-02.0-[0c-0f]----00.0-[0d-0f]--+-00.0-[0f]--+-00.0 nVidia Corporation Device 1088
| | \-00.1 nVidia Corporation GF110 High Definition Audio Controller
| \-02.0-[0e]--+-00.0 nVidia Corporation Device 1088
| \-00.1 nVidia Corporation GF110 High Definition Audio Controller
:
+-0b.0-[04-07]----00.0-[05-07]--+-00.0-[07]--+-00.0 nVidia Corporation Device 1088
| | \-00.1 nVidia Corporation GF110 High Definition Audio Controller
| \-02.0-[06]--+-00.0 nVidia Corporation Device 1088
| \-00.1 nVidia Corporation GF110 High Definition Audio Controller
私には、すべてのパスが物理的に利用可能 (構造のようなツリー) であり、cuda 4.0 を使用しているように見えますが、cuda 4.1 以降を使用している場合、cudaDeviceCanAccessPeer() は「クロスカード」通信に対して false を返します。すべてのホストからデバイスへのパスは常に (もちろん) 利用可能であることに注意してください。