Skip to content

Commit 7feb175

Browse files
committed
up
Signed-off-by: Chen, Sheng S <sheng.s.chen@intel.com>
1 parent b3a494d commit 7feb175

1 file changed

Lines changed: 21 additions & 26 deletions

File tree

clang/runtime/dpct-rt/include/dpct/ze_utils.hpp

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
namespace dpct {
1919
namespace experimental {
2020

21+
struct ipc_mem_handle_ext_t {
22+
pid_t pid;
23+
ze_ipc_mem_handle_t handle;
24+
};
25+
2126
namespace detail {
2227

2328
#ifndef _SYS_pidfd_open
@@ -28,10 +33,7 @@ namespace detail {
2833
#define _SYS_pidfd_getfd 438 // syscall number for pidfd_getfd
2934
#endif
3035

31-
/// Obtain a duplicate of another process's file descriptor.
32-
/// \param [in] ext_handle IPC memory handle extension
33-
/// \returns obtained file descriptor
34-
template <class T> int get_fd_of_peer_process(T ext_handle) {
36+
inline int get_fd_of_peer_process(ipc_mem_handle_ext_t ext_handle) {
3537
int pidfd = syscall(_SYS_pidfd_open, ext_handle.pid,
3638
0); // obtain a file descriptor that refers to a
3739
// process(requires kernel 5.6+).
@@ -44,41 +46,34 @@ template <class T> int get_fd_of_peer_process(T ext_handle) {
4446

4547
} // namespace detail
4648

47-
struct ipc_mem_handle_ext_t {
48-
pid_t pid;
49-
ze_ipc_mem_handle_t handle;
50-
};
51-
5249
/// Creates an IPC memory handle for the specified allocation.
5350
/// \param [in] ptr Pointer to the device memory allocation
5451
/// \param [out] ext_handle_ptr IPC memory handle extension
55-
inline void get_mem_ipc_handle(const void *ptr,
56-
ipc_mem_handle_ext_t *ext_handle_ptr) {
52+
inline ze_result_t get_mem_ipc_handle(const void *ptr,
53+
ipc_mem_handle_ext_t *ext_handle_ptr) {
5754
ext_handle_ptr->pid = getpid();
58-
auto ret =
59-
zeMemGetIpcHandle(sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
60-
dpct::get_current_device().get_context()),
61-
ptr, &ext_handle_ptr->handle);
62-
if (ret != ZE_RESULT_SUCCESS)
63-
throw std::runtime_error("The zeMemGetIpcHandle execution failed.");
55+
return zeMemGetIpcHandle(
56+
sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
57+
dpct::get_current_device().get_context()),
58+
ptr, &ext_handle_ptr->handle);
6459
}
6560

6661
/// Opens an IPC memory handle to retrieve a device pointer.
6762
/// \param [in] ext_handle IPC memory handle extension
6863
/// \param [out] pptr Pointer to device allocation in this process
69-
inline void open_mem_ipc_handle(ipc_mem_handle_ext_t ext_handle, void **pptr) {
64+
inline ze_result_t open_mem_ipc_handle(ipc_mem_handle_ext_t ext_handle,
65+
void **pptr) {
7066
int fd = detail::get_fd_of_peer_process(ext_handle);
7167
if (fd < 0)
7268
throw std::runtime_error("Cannot get file descriptor of peer process.");
7369
*((int *)ext_handle.handle.data) = fd;
74-
auto ret =
75-
zeMemOpenIpcHandle(sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
76-
dpct::get_current_device().get_context()),
77-
sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
78-
(sycl::device)dpct::get_current_device()),
79-
ext_handle.handle, 0u, pptr);
80-
if (ret != ZE_RESULT_SUCCESS)
81-
throw std::runtime_error("The zeMemOpenIpcHandle execution failed.");
70+
71+
return zeMemOpenIpcHandle(
72+
sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
73+
dpct::get_current_device().get_context()),
74+
sycl::get_native<sycl::backend::ext_oneapi_level_zero>(
75+
(sycl::device)dpct::get_current_device()),
76+
ext_handle.handle, 0u, pptr);
8277
}
8378

8479
} // namespace experimental

0 commit comments

Comments
 (0)