1

これをテストするためにマルチ 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 つ目はリンクがアクティブ化されているかどうかをテストすることになっていますか?

4

1 に答える 1

2

私はそれらが同じであるとは思わない。

  • cuDeviceCanAccessPeer2 つのデバイス間でP2P アクセスが可能かどうかを返します。
  • cuDeviceGetP2PAttribute2 つのデバイス間でP2P アクセスが有効になっているかどうかを返します。

への事前の呼び出しが成功していない場合はcuCtxEnablePeerAccess、 true を返す場合でもcuDeviceGetP2PAttribute、属性を照会したときに false を返す必要があります。CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTEDcuDeviceCanAccessPeer

また、現在、これを確認するために P2P 対応システムにアクセスできないことに注意してください。

于 2016-11-08T10:43:50.717 に答える