我有一个带有 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() 会为“跨卡”通信提供错误。请注意,所有主机到设备的路径始终可用(当然)。