これをテストするためにマルチ GPU システムにアクセスすることはできませんが、cuda.h で非常によく似た 2 つのことを見つけました。まずは機能です
CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev);
記述
コンテキスト on がコンテキスト on からメモリに直接アクセスできるかどうかの値
*canAccessPeerを返します。fromへの直接アクセスが可能な場合、 を呼び出すことにより、2 つの特定のコンテキストでアクセスを有効にすることができます。1devpeerDev0peerDevdev::cuCtxEnablePeerAccess()
そして2つ目は
CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice);
記述
との間のリンク
*value theの要求された属性の値を返します。サポートされている属性は次のとおりです。attribsrcDevicedstDevice
::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: 2 つのデバイス間のリンクのパフォーマンスを示す相対値。
::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTEDP2:1` P2P アクセスが有効な場合。
::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1リンクを介したアトミック操作がサポートされている場合。
名前は、への呼び出しがset toを使用するのと同じでCU_DEVICE_ATTRUBUTE_ACCESS_SUPPORTEDあることを示唆しています が、「 P2P アクセスが有効な場合」という説明は私を混乱させます。cuDeviceCanAccessPeercuDeviceGetP2PAttributeattrib::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P1
それらは本当に同じですか、それとも 2 つ目はリンクがアクティブ化されているかどうかをテストすることになっていますか?