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 de1
si les contextes surdev
sont capables d'accéder directement à la mémoire de contexte surpeerDev
et0
autrement. Si l'accès direct depeerDev
à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 entresrcDevice
etdstDevice
. 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é?
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