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