2016-10-26 1 views
0

Je n'ai pas accès à un système multi-gpu pour tester cela, mais dans cuda.h j'ai trouvé deux choses qui me semblent assez similaires. La première est la fonctionQuelle est la différence entre cuDeviceCanAccessPeer (...) et cuDeviceGetP2PAttribute (..., CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, ...)?

CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev); 

Décrit comme

retours en *canAccessPeer une valeur de 1 si les contextes sur dev sont capables d'accéder directement à la mémoire de contexte sur peerDev et 0 autrement. Si l'accès direct de peerDev à dev est possible, alors l'accès peut être activé dans deux contextes spécifiques en appelant ::cuCtxEnablePeerAccess().

Et le second est

CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice); 

décrit comme

retours en valeur *value the de l'attribut demandé attrib du lien entre srcDevice et dstDevice. Les attributs pris en charge sont les suivants:

::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: valeur relative indiquant les performances de la liaison entre deux périphériques.

::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2 : 1` si l'accès P2P est activé.

::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1 si les opérations atomiques sur la liaison sont prises en charge.

Le nom CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTED suggère qu'un appel à cuDeviceCanAccessPeer est le même que l'utilisation cuDeviceGetP2PAttribute avec attrib ensemble à ::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P, mais la description « 1 si P2P accès est activé » me embrouille.

Sont-ils vraiment les mêmes, ou le second est censé tester si le lien a été activé?

Répondre

0

Je ne crois pas qu'ils soient identiques.

  • cuDeviceCanAccessPeer Vérifie si l'accès P2P est possible entre deux appareils ou non.
  • cuDeviceGetP2PAttribute renvoie si l'accès P2P est activé entre deux périphériques.

Sans un appel réussi avant cuCtxEnablePeerAccess, cuDeviceGetP2PAttribute devrait renvoyer false lors d'une interrogation pour l'attribut CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, même si cuDeviceCanAccessPeer renvoie true.

Notez que je n'ai pas non plus accès à un système compatible P2P pour vérifier cela.

+0

Il semble que oui, mais d'un autre côté, le nom de l'attribut 'CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED' me perturbe un peu. – pansk