【发布时间】:2013-11-02 09:23:38
【问题描述】:
我有一个带有 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。请注意,所有主机到设备的路径始终可用(当然)。
【问题讨论】:
标签: linux cuda gpgpu nvidia multi-gpu