Skip to content

[UR] Implement IPC physical_mem API in UR#22115

Open
ldorau wants to merge 3 commits into
intel:syclfrom
ldorau:UR_Implement_IPC_physical_mem_API_in_UR
Open

[UR] Implement IPC physical_mem API in UR#22115
ldorau wants to merge 3 commits into
intel:syclfrom
ldorau:UR_Implement_IPC_physical_mem_API_in_UR

Conversation

@ldorau
Copy link
Copy Markdown
Contributor

@ldorau ldorau commented May 26, 2026

Implement urIPCGetPhysMemHandleExp, urIPCPutPhysMemHandleExp,
urIPCOpenPhysMemHandleExp, and urIPCClosePhysMemHandleExp.

Level Zero v2 adapter (Linux, BMG/Xe2+ only)

  • physical_mem.hpp/cpp moved to v2/; ur_physical_mem_handle_t_ extended
    with Device, Size, EnableIpc, IpcVirtualAddress fields.
  • isIntelBMGOrNewer() helper (IP version >= 0x05004000); IPC functions
    return UR_RESULT_ERROR_UNSUPPORTED_FEATURE on pre-Xe2 devices.
  • urIPCGetPhysMemHandleExp: calls zeMemGetIpcHandleWithProperties with
    ZE_IPC_MEM_HANDLE_TYPE_FLAG_DEFAULT; detects fd-based handles via
    fcntl(F_GETFD) and rejects with UNSUPPORTED_FEATURE.
  • urIPCOpenPhysMemHandleExp: calls zeMemOpenIpcHandle (flags=0); stores
    virtual address in IpcVirtualAddress.
  • urVirtualMemMap: returns UR_RESULT_ERROR_INVALID_ARGUMENT for
    IPC-opened handles (address already set by zeMemOpenIpcHandle).
  • UR_DEVICE_INFO_IPC_PHYSICAL_MEMORY_SUPPORT_EXP: isIntelBMGOrNewer() on
    Linux, false on Windows.

Level Zero v1 adapter

  • physical_mem.cpp provides only urPhysicalMemCreate/Retain/Release/GetInfo.
  • Stub definitions for the four IPC functions return
    UR_RESULT_ERROR_UNSUPPORTED_FEATURE so the L0v1 adapter links correctly.

Other adapters (CUDA, HIP, OpenCL, Native CPU, Offload)

  • Return UR_RESULT_ERROR_UNSUPPORTED_FEATURE; report device info as false.

Conformance tests

  • Tests for all four entry points; skip when feature is unsupported.

@ldorau ldorau requested a review from slawekptak May 26, 2026 09:53
Comment thread unified-runtime/include/unified-runtime/ur_api.h
Comment thread unified-runtime/source/adapters/level_zero/memory.cpp Outdated
Comment thread unified-runtime/source/adapters/opencl/common.hpp Outdated
Comment thread unified-runtime/test/conformance/virtual_memory/ze_ipc_phys_mem_e2e.cpp Outdated
@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from 70701a0 to 523e104 Compare May 26, 2026 12:02
@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented May 26, 2026

Rebased

@ldorau ldorau requested a review from slawekptak May 26, 2026 12:02
@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from 523e104 to 4cbcfa8 Compare May 26, 2026 14:30
@ldorau ldorau marked this pull request as ready for review May 27, 2026 08:22
@ldorau ldorau requested review from a team as code owners May 27, 2026 08:22
@ldorau ldorau requested a review from pbalcer May 27, 2026 08:22
@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented May 27, 2026

The Offload CI job fails because of #22125

@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from a9eb70a to 6dac91d Compare May 27, 2026 11:12
@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented May 27, 2026

Rebased

@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from 29aee2c to 4a61124 Compare May 27, 2026 13:01
@ldorau ldorau marked this pull request as draft May 27, 2026 20:28
@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from 6113038 to 572be16 Compare May 28, 2026 08:49
ur_physical_mem_handle_t hPhysMem,
void **ppIPCPhysMemHandleData,
size_t *pIPCPhysMemHandleDataSizeRet) {
#ifdef __linux__
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are L0 driver IPC calls specific to Linux?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, currently only implementation for Linux is needed. A Windows one will differ.

void **ppIPCPhysMemHandleData,
size_t *pIPCPhysMemHandleDataSizeRet) {
#ifdef __linux__
if (!hContext)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Majority of those checks should probably be done on the validation layer side.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed

@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch from 572be16 to 37d96d9 Compare May 28, 2026 10:37
ldorau added 2 commits May 28, 2026 11:23
Add four new function specs to exp-inter-process-communication.yml
and update registry.yml to support IPC operations on physical memory
objects:
- urIPCGetPhysMemHandleExp: export an IPC handle for a physical_mem
- urIPCPutPhysMemHandleExp: release the exported IPC handle
- urIPCOpenPhysMemHandleExp: import an IPC handle into a physical_mem
- urIPCClosePhysMemHandleExp: close the imported physical_mem

Also add ENABLE_IPC flag to ur_physical_mem_flags_t in virtual_memory.yml
to allow allocating physical memory that can be shared via IPC handles.

Add a new enumerator to ur_physical_mem_info_t that allows querying the
virtual address established by zeMemOpenIpcHandle when a physical memory
handle is opened via urIPCOpenPhysMemHandleExp.  Returns nullptr for
non-IPC handles.

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Add auto-generated files based on the IPC physical_mem spec changes
(urIPCGetPhysMemHandleExp, urIPCPutPhysMemHandleExp,
urIPCOpenPhysMemHandleExp, urIPCClosePhysMemHandleExp,
UR_PHYSICAL_MEM_FLAG_ENABLE_IPC, UR_DEVICE_INFO_IPC_PHYSICAL_MEMORY_SUPPORT_EXP):

- ur_api.h, ur_api_funcs.def, ur_ddi.h: function declarations
- ur_print.h/hpp, ur_print.cpp: printing support
- ur_api.cpp: API dispatch stubs
- ur_ldrddi.cpp, ur_libapi.cpp: loader implementations
- ur_trcddi.cpp, ur_valddi.cpp: tracing and validation layers
- ur_mockddi.cpp: mock adapter
- loader.def.in, loader.map.in: loader symbol exports
- level_zero ur_interface_loader.cpp/.hpp: Level-Zero DDI table entries
- urinfo.hpp: updated urinfo tool

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch 4 times, most recently from 75afc3f to 3c08b2b Compare May 29, 2026 13:35
@ldorau ldorau requested a review from nrspruit May 29, 2026 14:45
@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented May 29, 2026

The Offload CI job fails because of #22125

@ldorau ldorau marked this pull request as ready for review May 29, 2026 14:55
@ldorau ldorau requested a review from kswiecicki May 29, 2026 15:03
@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch 2 times, most recently from dc8e61e to 95c1d4a Compare June 1, 2026 14:13
@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented Jun 1, 2026

@nrspruit please review 2 files: unified-runtime/source/adapters/level_zero/v2/physical_mem.cpp and unified-runtime/source/adapters/level_zero/v2/physical_mem.hpp

@ldorau
Copy link
Copy Markdown
Contributor Author

ldorau commented Jun 1, 2026

The Offload CI job fails because of #22125

@ldorau ldorau force-pushed the UR_Implement_IPC_physical_mem_API_in_UR branch 2 times, most recently from 88e952f to fe60cba Compare June 1, 2026 19:17
Implement urIPCGetPhysMemHandleExp, urIPCPutPhysMemHandleExp,
urIPCOpenPhysMemHandleExp, and urIPCClosePhysMemHandleExp.

Level Zero v2 adapter (Linux, BMG/Xe2+ only):
- physical_mem.hpp and physical_mem.cpp moved to v2/ subdirectory
- urIPCGetPhysMemHandleExp: calls zeMemGetIpcHandleWithProperties
  passing ze_physical_mem_handle_t cast to (const void *) directly,
  using ze_ipc_mem_handle_type_ext_desc_t with
  ZE_IPC_MEM_HANDLE_TYPE_FLAG_DEFAULT; detects fd-based handles via
  fcntl(F_GETFD) and returns UR_RESULT_ERROR_UNSUPPORTED_FEATURE
- urIPCOpenPhysMemHandleExp: calls zeMemOpenIpcHandle with flags=0
- urIPCPutPhysMemHandleExp: calls zeMemPutIpcHandle
- urIPCClosePhysMemHandleExp: delegates to urPhysicalMemRelease
- virtual_mem.cpp: urVirtualMemMap returns UR_RESULT_ERROR_INVALID_ARGUMENT
  for IPC-opened handles; the virtual address is already established by
  zeMemOpenIpcHandle and is accessed via
  urPhysicalMemGetInfo(UR_PHYSICAL_MEM_INFO_IPC_VIRTUAL_ADDRESS)
- device.cpp: report UR_DEVICE_INFO_IPC_PHYSICAL_MEMORY_SUPPORT_EXP
  as isIntelBMGOrNewer() on Linux, false on Windows
- Add isIntelBMGOrNewer() helper (IP version threshold 0x05004000,
  first Xe2 stepping BMG_G21_A0); IPC entry points return
  UR_RESULT_ERROR_UNSUPPORTED_FEATURE on pre-Xe2 devices

Level Zero v1 adapter:
- physical_mem.cpp provides only the four non-IPC functions
  (urPhysicalMemCreate/Retain/Release/GetInfo)
- Add stub definitions for the four IPC functions returning
  UR_RESULT_ERROR_UNSUPPORTED_FEATURE so the L0v1 adapter links correctly

Other adapters (CUDA, HIP, OpenCL, Native CPU, Offload):
- Return UR_RESULT_ERROR_UNSUPPORTED_FEATURE from all four functions
- Report UR_DEVICE_INFO_IPC_PHYSICAL_MEMORY_SUPPORT_EXP as false

Conformance tests:
- Add urIPCGetPhysMemHandleExp.cpp, urIPCPutPhysMemHandleExp.cpp,
  urIPCOpenPhysMemHandleExp.cpp, urIPCClosePhysMemHandleExp.cpp
- Add urIPCPhysMemHandleExpFixtures.hpp with urIPCPhysMemTest,
  urIPCPhysMemHandleTest, urIPCOpenedPhysMemTest fixtures

Signed-off-by: Lukasz Dorau <lukasz.dorau@intel.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants