@@ -630,9 +630,9 @@ ur_platform_handle_t_::getDeviceFromNativeHandle(ze_device_handle_t ZeDevice) {
630630 std::shared_lock<ur_shared_mutex> Lock (URDevicesCacheMutex);
631631 auto it = std::find_if (URDevicesCache.begin (), URDevicesCache.end (),
632632 [&](std::unique_ptr<ur_device_handle_t_> &D) {
633- return D. get () ->ZeDevice == ZeDevice &&
634- (D. get () ->RootDevice == nullptr ||
635- D. get () ->RootDevice ->RootDevice == nullptr );
633+ return D->ZeDevice == ZeDevice &&
634+ (D->RootDevice == nullptr ||
635+ D->RootDevice ->RootDevice == nullptr );
636636 });
637637 if (it != URDevicesCache.end ()) {
638638 return (*it).get ();
@@ -785,6 +785,44 @@ ur_result_t ur_platform_handle_t_::populateDeviceCacheIfNeeded() {
785785 dev->Id = id++;
786786 }
787787
788+ for (auto &dev : URDevicesCache) {
789+ dev->peers = std::vector<ur_device_handle_t_::PeerStatus>(
790+ URDevicesCache.size (), ur_device_handle_t_::PeerStatus::NO_CONNECTION);
791+
792+ for (size_t peerId = 0 ; peerId < URDevicesCache.size (); ++peerId) {
793+ if (peerId == dev->Id .value ())
794+ continue ;
795+
796+ ZeStruct<ze_device_p2p_properties_t > p2pProperties;
797+ ZE2UR_CALL_THROWS (
798+ zeDeviceGetP2PProperties,
799+ (dev->ZeDevice , URDevicesCache[peerId]->ZeDevice , &p2pProperties));
800+ if (!(p2pProperties.flags & ZE_DEVICE_P2P_PROPERTY_FLAG_ACCESS)) {
801+ UR_LOG (INFO,
802+ " p2p access to memory of dev:{} from dev:{} not possible due to "
803+ " lack of p2p property" ,
804+ peerId, dev->Id .value ());
805+ continue ;
806+ }
807+
808+ ze_bool_t p2p;
809+ ZE2UR_CALL_THROWS (
810+ zeDeviceCanAccessPeer,
811+ (dev->ZeDevice , URDevicesCache[peerId]->ZeDevice , &p2p));
812+ if (!p2p) {
813+ UR_LOG (INFO,
814+ " p2p access to memory of dev:{} from dev:{} not possible due to "
815+ " no connection" ,
816+ peerId, dev->Id .value ());
817+ continue ;
818+ }
819+
820+ UR_LOG (INFO, " p2p access to memory of dev:{} from dev:{} can be enabled" ,
821+ peerId, dev->Id .value ());
822+ dev->peers [peerId] = ur_device_handle_t_::PeerStatus::DISABLED;
823+ }
824+ }
825+
788826 return UR_RESULT_SUCCESS;
789827}
790828
0 commit comments