Skip to content

Commit 0cdd69f

Browse files
committed
USM-P2P extension implementation for hip.
Uses the latest non deprecated hip APIs. fully tested and passing via DPC++ using Crusher. Signed-off-by: JackAKirk <[email protected]>
1 parent 810a577 commit 0cdd69f

File tree

1 file changed

+48
-14
lines changed

1 file changed

+48
-14
lines changed

source/adapters/hip/usm_p2p.cpp

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,59 @@
99
//===----------------------------------------------------------------------===//
1010

1111
#include "common.hpp"
12+
#include "context.hpp"
1213

13-
UR_APIEXPORT ur_result_t UR_APICALL
14-
urUsmP2PEnablePeerAccessExp(ur_device_handle_t, ur_device_handle_t) {
15-
detail::ur::die(
16-
"urUsmP2PEnablePeerAccessExp is not implemented for HIP adapter.");
17-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
14+
UR_APIEXPORT ur_result_t UR_APICALL urUsmP2PEnablePeerAccessExp(
15+
ur_device_handle_t commandDevice, ur_device_handle_t peerDevice) {
16+
ur_result_t result = UR_RESULT_SUCCESS;
17+
try {
18+
ScopedContext active(commandDevice);
19+
UR_CHECK_ERROR(hipDeviceEnablePeerAccess(peerDevice->get(), 0));
20+
} catch (ur_result_t err) {
21+
result = err;
22+
}
23+
return result;
1824
}
1925

20-
UR_APIEXPORT ur_result_t UR_APICALL
21-
urUsmP2PDisablePeerAccessExp(ur_device_handle_t, ur_device_handle_t) {
22-
detail::ur::die(
23-
"urUsmP2PDisablePeerAccessExp is not implemented for HIP adapter.");
24-
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
26+
UR_APIEXPORT ur_result_t UR_APICALL urUsmP2PDisablePeerAccessExp(
27+
ur_device_handle_t commandDevice, ur_device_handle_t peerDevice) {
28+
ur_result_t result = UR_RESULT_SUCCESS;
29+
try {
30+
ScopedContext active(commandDevice);
31+
UR_CHECK_ERROR(hipDeviceDisablePeerAccess(peerDevice->get()));
32+
} catch (ur_result_t err) {
33+
result = err;
34+
}
35+
return result;
2536
}
2637

2738
UR_APIEXPORT ur_result_t UR_APICALL urUsmP2PPeerAccessGetInfoExp(
28-
ur_device_handle_t, ur_device_handle_t, ur_exp_peer_info_t, size_t propSize,
29-
void *pPropValue, size_t *pPropSizeRet) {
39+
ur_device_handle_t commandDevice, ur_device_handle_t peerDevice,
40+
ur_exp_peer_info_t propName, size_t propSize, void *pPropValue,
41+
size_t *pPropSizeRet) {
3042
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
31-
// Zero return value indicates that all of the queries currently return false.
32-
return ReturnValue(uint32_t{0});
43+
44+
int value;
45+
hipDeviceP2PAttr hip_attr;
46+
try {
47+
ScopedContext active(commandDevice);
48+
switch (propName) {
49+
case UR_EXP_PEER_INFO_UR_PEER_ACCESS_SUPPORTED: {
50+
hip_attr = hipDevP2PAttrAccessSupported;
51+
break;
52+
}
53+
case UR_EXP_PEER_INFO_UR_PEER_ATOMICS_SUPPORTED: {
54+
hip_attr = hipDevP2PAttrNativeAtomicSupported;
55+
break;
56+
}
57+
default: {
58+
return UR_RESULT_ERROR_INVALID_ENUMERATION;
59+
}
60+
}
61+
UR_CHECK_ERROR(hipDeviceGetP2PAttribute(
62+
&value, hip_attr, commandDevice->get(), peerDevice->get()));
63+
} catch (ur_result_t err) {
64+
return err;
65+
}
66+
return ReturnValue(value);
3367
}

0 commit comments

Comments
 (0)