【发布时间】:2014-04-14 19:00:08
【问题描述】:
我用:
- 单 CPU (Intel Core i7-4820K Ivy Bridge-E) 40 通道 PCIe 3.0 + 主板 MSI X79A-GD65 (8D)
- WindowsServer 2012、MSVS 2012 + CUDA 5.5 并编译为 64 位应用程序
- GPU 英伟达 Quadro K4000 和 K2000
- TCC 模式(特斯拉计算集群)中的所有 Quadros
- nVidia 视频驱动程序 332.50
simpleP2P 测试表明,所有 Quadro K4000 和 K4000 - 都支持点对点 (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../../bi 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) -> Quadro K2000 (GPU1) 进行点对点 (P2P) 访问:否
从 Quadro K2000 (GPU1) -> Quadro K4000 (GPU0) 进行点对点 (P2P) 访问:否
C:\ProgramData\NVIDIA 需要两个或更多 SM 2.0 类 GPU 公司\CUDA Samples\v5.5\0_Simple\simpleP2P../../bin/win64/Release/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
我可以将 GPUDirect v2 P2P 与 Quadros 一起使用吗?如果可以,那么在哪一个? BAR1 的大小是否应该等于 GPU-RAM 的大小才能使用 P2P?
更新 11.03.2014 23:16:
- 我不能使用 P2P 直接传输 - 我使用
cudaMemcpy(gpu_ptr1, gpu_ptr0, cudaMemcpyDefault);在 PCIe-gen2 8x 上以 3 GB/秒(理论上 4 GB/秒)成功传输了随机生成的数据,但功能正常通过主机复制 - 在 VisualProfiler Context1(DtoH) 和 Context2(HtoD) 中。 - 我不能通过使用
__global__ Kernel(char *dst, char *src, size_t size) { int idx = blockIdx.x * blockDim.x + threadIdx.x; dst[idx] = src[idx]; }使用P2P 直接访问 - 使用函数cudaDeviceEnablePeerAccess()时出现错误,使用cudaDeviceCanAccessPeer()时出现0
【问题讨论】:
-
可能取决于芯片组,您可能会遇到这种情况:stackoverflow.com/a/6935100/1938163。 CUDA 5.5 中没有提到这个问题,所以我不排除它
-
@David Kernin 是的 GPU0QPI/HTGPU1 未解决。但这里我使用只有一个 IOH 的单 CPU,GPU 之间没有 QPI 连接。