2015-11-06 2 views
1

J'essaie de résoudre une erreur que j'ai détectée lors de l'exécution du programme exemple simpleP2P, inclus dans les exemples CUDA. L'erreur est la suivante:L'accès à la mémoire P2P échoue lors de l'exécution de l'exemple CUDA multi-GPU (simpleP2P)

$ ./simpleP2P 
[./simpleP2P] - Starting... 
Checking for multiple GPUs... 
CUDA-capable device count: 2 
> GPU0 = "  Tesla K20c" IS capable of Peer-to-Peer (P2P) 
> GPU1 = "  Tesla K20c" IS capable of Peer-to-Peer (P2P) 

Checking GPU(s) for support of peer to peer memory access... 
> Peer-to-Peer (P2P) access from Tesla K20c (GPU0) -> Tesla K20c (GPU1) : No 
> Peer-to-Peer (P2P) access from Tesla K20c (GPU1) -> Tesla K20c (GPU0) : No 
Two or more GPUs with SM 2.0 or higher capability are required for ./simpleP2P. 
Peer to Peer access is not available between GPU0 <-> GPU1, waiving test. 

Les appareils que je utilise sont les suivantes:

$ lspci | grep NVIDIA 
03:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1) 
83:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1) 

Des informations supplémentaires concernant la connectivité fournie par nvidia-smi:

$ nvidia-smi topo -m 
    GPU0 GPU1 CPU Affinity 
GPU0  X SOC 0-5,12-17 
GPU1 SOC X 6-11,18-23 

Legend: 

    X = Self 
    SOC = Path traverses a socket-level link (e.g. QPI) 
    PHB = Path traverses a PCIe host bridge 
    PXB = Path traverses multiple PCIe internal switches 
    PIX = Path traverses a PCIe internal switch 

Enfin plus bavard sortie de l'outil lspci.

03:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1) 
     Subsystem: NVIDIA Corporation Device 0982 
     Flags: bus master, fast devsel, latency 0, IRQ 11 
     Memory at f9000000 (32-bit, non-prefetchable) 
     Memory at d0000000 (64-bit, prefetchable) 
     Memory at ce000000 (64-bit, prefetchable) 
     Capabilities: <access denied> 
     Kernel driver in use: nvidia 
     Kernel modules: nvidia_346, nouveau, nvidiafb 
... 
83:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1) 
     Subsystem: NVIDIA Corporation Device 0982 
     Flags: bus master, fast devsel, latency 0, IRQ 11 
     Memory at cc000000 (32-bit, non-prefetchable) 
     Memory at b0000000 (64-bit, prefetchable) 
     Memory at ae000000 (64-bit, prefetchable) 
     Capabilities: <access denied> 
     Kernel driver in use: nvidia 
     Kernel modules: nvidia_346, nouveau, nvidiafb 

Vous avez des informations qui pourraient m'aider à dépanner ou à mieux comprendre où est le problème? Merci comme d'habitude de lire/aider. - Omar

Répondre

2

Lorsque processeurs graphiques sont reliés entre eux par un lien au niveau socket (QPI pour un système basé sur un processeur Intel):

GPU0  X SOC 0-5,12-17 
GPU1 SOC X 6-11,18-23 
     ^^^ 

alors les transactions P2P ne sont pas possibles entre ces 2 GPUs.

Les GPU participant au P2P ont un certain nombre d'exigences qui leur sont imposées. L'un d'entre eux est qu'ils doivent généralement être sur le même complexe racine PCIE. Les GPU qui sont connectées via une liaison de niveau socket (par exemple QPI) se trouvent sur deux "sockets" différentes, c'est-à-dire deux CPU différentes, et appartiennent donc à deux complexes racine PCIE différents.