Skip to content

Commit 4f9fa37

Browse files
committed
mem props POC
1 parent 51f1429 commit 4f9fa37

28 files changed

+518
-341
lines changed

benchmark/ubench.c

Lines changed: 91 additions & 312 deletions
Large diffs are not rendered by default.

docs/config/api.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ memory as well as functions that create, destroy and operate on the pool.
2828
.. doxygenfile:: memory_pool.h
2929
:sections: define enum typedef func var
3030

31+
TODO
32+
------------------------------------------
33+
34+
TODO
35+
36+
.. doxygenfile:: memory_props.h
37+
:sections: define enum typedef func var
38+
3139
Disjoint Pool
3240
------------------------------------------
3341

include/umf/base.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,39 @@ typedef enum umf_result_t {
5151
UMF_RESULT_ERROR_UNKNOWN = 0x7ffffffe ///< Unknown error
5252
} umf_result_t;
5353

54+
/// @brief TODO
55+
typedef struct umf_memory_properties_t *umf_memory_properties_handle_t;
56+
57+
/// @brief TODO
58+
// write about experimental api
59+
typedef enum umf_memory_property_id_t {
60+
UMF_MEMORY_PROPERTY_INVALID = -1, ///< TODO
61+
62+
// UMF specyfic
63+
UMF_MEMORY_PROVIDER_HANDLE,
64+
UMF_MEMORY_PROVIDER_OPS, // == type?
65+
UMF_MEMORY_POOL_HANDLE,
66+
UMF_MEMORY_POOL_OPS, // == type?
67+
68+
// generic pointer properties
69+
UMF_MEMORY_PROPERTY_POINTER_TYPE, // unreg host, reg host ??, dev, managed or umf_usm_memory_type_t?
70+
UMF_MEMORY_PROPERTY_BASE_ADDRESS, // base address
71+
UMF_MEMORY_PROPERTY_BASE_SIZE, // base size
72+
73+
// GPU specific
74+
UMF_MEMORY_PROPERTY_DEVICE, // handle (ze) or id (cuda)
75+
UMF_MEMORY_PROPERTY_BUFFER_ID, // unique id NOTE: this id is unique across all UMF allocs and != L0 or CUDA ID
76+
UMF_MEMORY_PROPERTY_DEVICE_ATTRIBUTES, // ze_memory_allocation_properties_t ?
77+
78+
// all cuda + l0
79+
// next other providers?
80+
// todo return type?
81+
82+
/// @cond
83+
UMF_MEMORY_PROPERTY_MAX_RESERVED = 0x1000, ///< Maximum reserved value
84+
/// @endcond
85+
} umf_memory_property_id_t;
86+
5487
/// @brief Type of the CTL query
5588
typedef enum umf_ctl_query_type {
5689
CTL_QUERY_READ,

include/umf/memory_props.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
*
3+
* Copyright (C) 2025 Intel Corporation
4+
*
5+
* Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
6+
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7+
*
8+
*/
9+
10+
#ifndef UMF_MEMORY_PROPS_H
11+
#define UMF_MEMORY_PROPS_H 1
12+
13+
#include <umf/base.h>
14+
15+
#ifdef __cplusplus
16+
extern "C" {
17+
#endif
18+
19+
/// @brief TODO
20+
umf_result_t
21+
umfGetMemoryPropertiesHandle(void *ptr,
22+
umf_memory_properties_handle_t *props_handle);
23+
24+
/// @brief TODO
25+
umf_result_t umfGetMemoryProperty(umf_memory_properties_handle_t props_handle,
26+
umf_memory_property_id_t memory_property_id,
27+
void *value);
28+
29+
#ifdef __cplusplus
30+
}
31+
#endif
32+
33+
#endif /* UMF_MEMORY_PROPS_H */

include/umf/memory_provider.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,13 @@ umf_result_t
260260
umfMemoryProviderAllocationMerge(umf_memory_provider_handle_t hProvider,
261261
void *lowPtr, void *highPtr, size_t totalSize);
262262

263+
/// TODO
264+
umf_result_t
265+
umfMemoryProviderGetAllocationProperties(umf_memory_provider_handle_t hProvider,
266+
umf_memory_properties_handle_t hProps,
267+
umf_memory_property_id_t propertyId,
268+
void *value);
269+
263270
#ifdef __cplusplus
264271
}
265272
#endif

include/umf/memory_provider_ops.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,11 @@ typedef struct umf_memory_provider_ops_t {
268268
void *arg, size_t size,
269269
umf_ctl_query_type_t queryType);
270270

271+
/// TODO
272+
umf_result_t (*ext_get_allocation_properties)(void *provider,
273+
umf_memory_properties_handle_t props_handle,
274+
umf_memory_property_id_t memory_property_id,
275+
void *value);
271276
} umf_memory_provider_ops_t;
272277

273278
#ifdef __cplusplus

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ set(UMF_SOURCES
4444
ipc.c
4545
ipc_cache.c
4646
memory_pool.c
47+
memory_props.c
4748
memory_provider.c
4849
memory_provider_get_last_failed.c
4950
memtarget.c

src/ipc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
6565
return ret;
6666
}
6767

68-
ret = umfPoolGetIPCHandleSize(allocInfo.pool, &ipcHandleSize);
68+
ret = umfPoolGetIPCHandleSize(allocInfo.props->pool, &ipcHandleSize);
6969
if (ret != UMF_RESULT_SUCCESS) {
7070
LOG_ERR("cannot get IPC handle size.");
7171
return ret;
@@ -79,7 +79,7 @@ umf_result_t umfGetIPCHandle(const void *ptr, umf_ipc_handle_t *umfIPCHandle,
7979

8080
// We cannot use umfPoolGetMemoryProvider function because it returns
8181
// upstream provider but we need tracking one
82-
umf_memory_provider_handle_t provider = allocInfo.pool->provider;
82+
umf_memory_provider_handle_t provider = allocInfo.props->pool->provider;
8383
assert(provider);
8484

8585
ret = umfMemoryProviderGetIPCHandle(provider, allocInfo.base,

src/libumf.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ EXPORTS
139139
umfCtlExec
140140
umfCtlGet
141141
umfCtlSet
142+
umfGetMemoryPropertiesHandle
143+
umfGetMemoryProperty
142144
umfJemallocPoolParamsCreate
143145
umfJemallocPoolParamsDestroy
144146
umfJemallocPoolParamsSetNumArenas

src/libumf.map

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ UMF_0.12 {
139139
umfCtlExec;
140140
umfCtlGet;
141141
umfCtlSet;
142+
umfGetMemoryPropertiesHandle;
143+
umfGetMemoryProperty;
142144
umfJemallocPoolParamsCreate;
143145
umfJemallocPoolParamsDestroy;
144146
umfJemallocPoolParamsSetNumArenas;

0 commit comments

Comments
 (0)