@@ -630,9 +630,9 @@ ur_platform_handle_t_::getDeviceFromNativeHandle(ze_device_handle_t ZeDevice) {
630
630
std::shared_lock<ur_shared_mutex> Lock (URDevicesCacheMutex);
631
631
auto it = std::find_if (URDevicesCache.begin (), URDevicesCache.end (),
632
632
[&](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 );
636
636
});
637
637
if (it != URDevicesCache.end ()) {
638
638
return (*it).get ();
@@ -785,6 +785,44 @@ ur_result_t ur_platform_handle_t_::populateDeviceCacheIfNeeded() {
785
785
dev->Id = id++;
786
786
}
787
787
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
+
788
826
return UR_RESULT_SUCCESS;
789
827
}
790
828
0 commit comments