2016-10-26 4 views
0

이 테스트하려면 다중 gpu 시스템에 액세스 할 수 있지만 cuda.h 꽤 비슷한 두 가지를 발견했습니다. 첫번째 *canAccessPeercuDeviceCanAccessPeer (...)와 cuDeviceGetP2PAttribute (..., CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED, ...)의 차이점은 무엇입니까?

반환으로 설명한 기능

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

이다 dev 문맥에 직접 그렇지 peerDev0 컨텍스트에 메모리를 액세스 할 수있는 경우 1 값. dev에서 peerDev의 직접 액세스가 가능하면 ::cuCtxEnablePeerAccess()을 호출하여 두 가지 특정 상황에서 액세스가 가능할 수 있습니다.

그리고 두 번째는

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

srcDevicedstDevice 간의 링크의 요구 특성의 attrib *value the

반환으로 설명한다. 지원되는 속성은 다음과 같습니다.

::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK : 두 장치 간의 링크 성능을 나타내는 상대 값입니다.

::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2 : 'P2P 액세스가 활성화 된 경우.

::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1 링크를 통한 원자 적 조작이 지원되는 경우.

이름 CU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTEDcuDeviceCanAccessPeer에 대한 호출이 ::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2Pattrib 세트 cuDeviceGetP2PAttribute를 사용하는 것과 동일하다는 것을 제안하지만, "P2P 액세스가 가능 경우 1"설명 나를 혼란.

링크가 실제로 활성화되었는지 또는 두 번째 링크가 활성화되었는지 테스트해야합니까?

답변

0

나는 그들이 똑같다고 생각하지 않습니다.

  • cuDeviceCanAccessPeer 복귀 P2P 접속이 두 개의 장치 사이의 여부가능 여부.
  • cuDeviceGetP2PAttribute은 P2P 액세스가 이 활성화되어 있는지 여부를 두 장치간에으로 반환합니다. CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED 특성에 대해 조회 할 때 cuCtxEnablePeerAccess에 이전에 성공적으로 호출하지 않고

cuDeviceGetP2PAttribute는 경우에도 cuDeviceCanAccessPeer 반환 참, 거짓 반환해야합니다.

현재이 기능을 사용하려면 P2P 지원 시스템에 액세스 할 수 없습니다.

+0

다른 것처럼 보이지만 속성 이름'CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED'는 조금 혼란 스럽습니다. – pansk