我可以将Quadro K4000和K2000用于GPUDirect v2点对点(P2P)通信吗?

时间:2014-03-11 09:12:19

标签: cuda gpgpu nvidia

我用:

  • 单CPU (Intel Core i7-4820K Ivy Bridge-E) 40路PCIe 3.0 + MotherBoard MSI X79A-GD65(8D)
  • WindowsServer 2012,MSVS 2012 + CUDA 5.5并编译为 64位应用程序
  • GPU nVidia Quadro K4000和K2000
  • TCC模式中的所有Quadros (特斯拉计算群集)
  • nVidia视频驱动程序332.50

simpleP2P-test显示,所有Quadros K4000和K4000-IS都能够进行点对点(P2P),但是点对点(P2P)访问 - Quadro K4000(GPU0)< - > Quadro K2000(GPU1):没有。

我可以将Quadro K4000和K2000用于GPUDirect v2 Peer-to-peer (P2P) communication吗?

  

[C:\ ProgramData \ NVIDIA Corporation \ CUDA   样品\ V5.5 \ 0_Simple \ simpleP2P ../../双   n / win64 / Release / simpleP2P.exe] - 正在启动...检查多个   GPU ...支持CUDA的设备数量:3

     
    

GPU0 =“Quadro K4000”能够点对点(P2P)

         

GPU1 =“Quadro K2000”能够点对点(P2P)

         

GPU2 =“GeForce GT 640”无法实现点对点(P2P)

  
     

检查GPU以支持对等内存访问...

     
    

Quadro K4000(GPU0)的点对点(P2P)访问 - > Quadro K2000(GPU1):否

         

Quadro K2000(GPU1)的点对点(P2P)访问 - > Quadro K4000(GPU0):否

  
     

C:\ ProgramData \ NVIDIA需要两个或更多SM 2.0类GPU   公司\ CUDA   样品\ V5.5 \ 0_Simple \ simpleP2P ../../斌/ Win64平台/发行/ simpleP2P.exe   跑步。支持UVA需要具有SM 2.0功能的GPU。窥视   在GPU0< - >之间不能进行对等访问。 GPU1,放弃测试。

TCC模式中的Quadros:

nvidia-smi.exe"
Tue Mar 11 12:43:05 2014
+------------------------------------------------------+
| NVIDIA-SMI 5.320.57   Driver Version: 320.57         |
|-------------------------------+----------------------+----------------------+
| GPU  Name            TCC/WDDM | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2000        TCC  | 0000:01:00.0     Off |                  N/A |
| 30%   30C    P8    N/A /  N/A |        6MB /  2047MB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  GeForce GT 640     WDDM  | 0000:02:00.0     N/A |                  N/A |
| 40%   32C  N/A     N/A /  N/A |     2016MB /  2047MB |     N/A      Default |
+-------------------------------+----------------------+----------------------+
|   2  Quadro K4000        TCC  | 0000:03:00.0     Off |                  N/A |
| 30%   36C    P8    10W /  87W |        8MB /  3071MB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Compute processes:                                               GPU Memory |
|  GPU       PID  Process name                                     Usage      |
|=============================================================================|
|    1            Not Supported                                               |

在文档中说:https://developer.nvidia.com/gpudirect

  

GPUDirect 可以显着消除不必要的系统内存副本   降低CPU开销,并减少延迟,从而产生重大影响   应用程序数据传输时间的性能改进   在NVIDIA Tesla™和Quadro™产品上运行。

那里有更详细的Quadros规格,但只有大约GPUDirect For Video,而且没有关于P2P的内容:http://www.nvidia.com/content/PDF/line_card/6660-nv-prographicssolutions-linecard-july13-final-lr.pdf

关于PCIe总线:

nvidia-smi -q
GPU 0000:01:00.0
    Product Name                    : Quadro K2000
    PCI
        Bus                         : 0x01
        Device                      : 0x00
        Domain                      : 0x0000
        Device Id                   : 0x0FFE10DE
        Bus Id                      : 0000:01:00.0
        Sub System Id               : 0x094C10DE
        GPU Link Info
            PCIe Generation
                Max                 : 2
                Current             : 1
            Link Width
                Max                 : 16x
                Current             : 8x
    FB Memory Usage
        Total                       : 2047 MiB
        Used                        : 6 MiB
        Free                        : 2041 MiB
    BAR1 Memory Usage
        Total                       : 256 MiB
        Used                        : 2 MiB
        Free                        : 254 MiB
    Compute Mode                    : Default
...

GPU 0000:02:00.0
    Product Name                    : GeForce GT 640
    PCI
        Bus                         : 0x02
        Device                      : 0x00
        Domain                      : 0x0000
        Device Id                   : 0x0FC110DE
        Bus Id                      : 0000:02:00.0
        Sub System Id               : 0x8A921462
        GPU Link Info
            PCIe Generation
                Max                 : N/A
                Current             : N/A
            Link Width
                Max                 : N/A
                Current             : N/A

...

GPU 0000:03:00.0
    Product Name                    : Quadro K4000
    PCI
        Bus                         : 0x03
        Device                      : 0x00
        Domain                      : 0x0000
        Device Id                   : 0x11FA10DE
        Bus Id                      : 0000:03:00.0
        Sub System Id               : 0x097C10DE
        GPU Link Info
            PCIe Generation
                Max                 : 2
                Current             : 1
            Link Width
                Max                 : 16x
                Current             : 16x
    FB Memory Usage
        Total                       : 3071 MiB
        Used                        : 8 MiB
        Free                        : 3063 MiB
    BAR1 Memory Usage
        Total                       : 256 MiB
        Used                        : 2 MiB
        Free                        : 254 MiB
    Compute Mode                    : Default

我可以在Quadros中使用GPUDirect v2 P2P吗?如果可以的话,我可以在哪些中使用? 应该是BAR1的大小是否等于GPU-RAM的大小才能使用P2P?

更新11.03.2014 23:16

  1. 无法使用P2P直接传输 - 我在PCIe-gen2 8x(理论上为4 GB /秒)上成功使用cudaMemcpy(gpu_ptr1, gpu_ptr0, cudaMemcpyDefault); 3 GB /秒传输随机生成的数据,但功能通过主机复制 - 在VisualProfiler Context1(DtoH)和Context2(HtoD)中。
  2. 无法使用P2P直接访问使用__global__ Kernel(char *dst, char *src, size_t size) { int idx = blockIdx.x * blockDim.x + threadIdx.x; dst[idx] = src[idx]; } - 使用函数cudaDeviceEnablePeerAccess()时出错,使用{{1}时获取0 }}

1 个答案:

答案 0 :(得分:2)

我不知道它是否与您的问题有关,但请注意:

    GPU Link Info
        PCIe Generation
            Max                 : 2
            Current             : 1
        Link Width
            Max                 : 16x
            Current             : 8x

和此:

        PCIe Generation
            Max                 : 2
            Current             : 1
        Link Width
            Max                 : 16x
            Current             : 16x

也就是说,你的PCIe链接已经从2.0(5 GT / s)降级到1.0(2.5 GT / s),在一张卡上从16x降级到8x ......很可能这是GPU直接的问题同样,但肯定不是你想要的,为了从你的PCIe中挤出所有的性能(在一张卡上你得到25%的理论值,50%在另一张卡上)。

我发现将卡放在mothorboard上的顺序非常重要;过热也可能导致公共汽车降级,或尘埃......行星对齐太可能......

编辑:我不知道TCC是GPU直接工作的强制要求,因此以下内容无效。

首先,我尝试移除显卡,看看是否只使用两个四核卡,你得到所有PCIe 2.0 / 16x,以及是否在这种情况下GPU直接开始工作。

编辑:从您的附加信息:“因为在主板上显示器必须连接到第一个插槽中的卡(带有16个PCIe-Lanes),然后我有:16x-GeForce,16x-Quadro K4000和8x- Quadro K2000“

幸运的是,这不是真的(或者至少不是manual of your motherboad中报道的内容):

lower part of pag 18 of the manual of the motherboard

所以连接显示器的正确位置是插槽PCI_E6,8x一个...好运交换卡。

恭喜你的问题如此精确 - 这有很大的帮助(注意 - 仍然不知道它是否解决了......让我们知情!)。