Skip to content

Commit 166709e

Browse files
committed
add memtargetGetType
1 parent 6395af5 commit 166709e

File tree

7 files changed

+67
-0
lines changed

7 files changed

+67
-0
lines changed

include/umf/memtarget.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,27 @@
1010
#ifndef UMF_MEMTARGET_H
1111
#define UMF_MEMTARGET_H 1
1212

13+
#include <umf/base.h>
14+
1315
#ifdef __cplusplus
1416
extern "C" {
1517
#endif
1618

1719
typedef struct umf_memtarget_t *umf_memtarget_handle_t;
1820
typedef const struct umf_memtarget_t *umf_const_memtarget_handle_t;
1921

22+
typedef enum umf_memtarget_type_t {
23+
UMF_MEMTARGET_TYPE_UNKNOWN = 0,
24+
UMF_MEMTARGET_TYPE_NUMA = 1,
25+
} umf_memtarget_type_t;
26+
27+
/// \brief Gets the type of the memory target.
28+
/// \param hMemtarget handle to the memory target
29+
/// \param type [out] type of the memory target
30+
/// \return UMF_RESULT_SUCCESS on success or appropriate error code on failure.
31+
umf_result_t umfMemtargetGetType(umf_const_memtarget_handle_t hMemtarget,
32+
umf_memtarget_type_t *type);
33+
2034
#ifdef __cplusplus
2135
}
2236
#endif

src/libumf.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ EXPORTS
4343
umfMemspaceDestroy
4444
umfMemspaceMemtargetNum
4545
umfMemspaceMemtargetGet
46+
umfMemtargetGetType
4647
umfOpenIPCHandle
4748
umfOsMemoryProviderOps
4849
umfPoolAlignedMalloc

src/libumf.map

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ UMF_1.0 {
4343
umfMemspaceHighestCapacityGet;
4444
umfMemspaceHostAllGet;
4545
umfMemspaceLowestLatencyGet;
46+
umfMemtargetGetType;
4647
umfOpenIPCHandle;
4748
umfOsMemoryProviderOps;
4849
umfPoolAlignedMalloc;

src/memtarget.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,12 @@ umf_result_t umfMemtargetGetLatency(umf_memtarget_handle_t srcMemoryTarget,
106106
return srcMemoryTarget->ops->get_latency(srcMemoryTarget->priv,
107107
dstMemoryTarget->priv, latency);
108108
}
109+
110+
umf_result_t umfMemtargetGetType(umf_const_memtarget_handle_t memoryTarget,
111+
umf_memtarget_type_t *type) {
112+
if (!memoryTarget || !type) {
113+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
114+
}
115+
116+
return memoryTarget->ops->get_type(memoryTarget->priv, type);
117+
}

src/memtarget_ops.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ typedef struct umf_memtarget_ops_t {
4343
size_t *bandwidth);
4444
umf_result_t (*get_latency)(void *srcMemoryTarget, void *dstMemoryTarget,
4545
size_t *latency);
46+
47+
umf_result_t (*get_type)(void *memoryTarget, umf_memtarget_type_t *type);
4648
} umf_memtarget_ops_t;
4749

4850
#ifdef __cplusplus

src/memtargets/memtarget_numa.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,15 @@ static umf_result_t numa_get_latency(void *srcMemoryTarget,
317317
return UMF_RESULT_SUCCESS;
318318
}
319319

320+
static umf_result_t numa_get_type(void *memTarget, umf_memtarget_type_t *type) {
321+
if (!memTarget || !type) {
322+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
323+
}
324+
325+
*type = UMF_MEMTARGET_TYPE_NUMA;
326+
return UMF_RESULT_SUCCESS;
327+
}
328+
320329
struct umf_memtarget_ops_t UMF_MEMTARGET_NUMA_OPS = {
321330
.version = UMF_VERSION_CURRENT,
322331
.initialize = numa_initialize,
@@ -326,5 +335,6 @@ struct umf_memtarget_ops_t UMF_MEMTARGET_NUMA_OPS = {
326335
.get_capacity = numa_get_capacity,
327336
.get_bandwidth = numa_get_bandwidth,
328337
.get_latency = numa_get_latency,
338+
.get_type = numa_get_type,
329339
.memory_provider_create_from_memspace =
330340
numa_memory_provider_create_from_memspace};

test/memspaces/memtarget.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,37 @@
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

55
#include "memspace_helpers.hpp"
6+
7+
#include <umf/base.h>
68
#include <umf/memspace.h>
79
#include <umf/memtarget.h>
810

911
using umf_test::test;
12+
13+
TEST_F(test, memTargetNuma) {
14+
auto memspace = umfMemspaceHostAllGet();
15+
ASSERT_NE(memspace, nullptr);
16+
17+
for (size_t i = 0; i < umfMemspaceMemtargetNum(memspace); i++) {
18+
auto hTarget = umfMemspaceMemtargetGet(memspace, i);
19+
ASSERT_NE(hTarget, nullptr);
20+
umf_memtarget_type_t type;
21+
auto ret = umfMemtargetGetType(hTarget, &type);
22+
EXPECT_EQ(ret, UMF_RESULT_SUCCESS);
23+
EXPECT_EQ(type, UMF_MEMTARGET_TYPE_NUMA);
24+
}
25+
}
26+
27+
TEST_F(test, memTargetInvalid) {
28+
auto memspace = umfMemspaceHostAllGet();
29+
ASSERT_NE(memspace, nullptr);
30+
umf_memtarget_type_t type;
31+
auto ret = umfMemtargetGetType(NULL, &type);
32+
EXPECT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
33+
ret = umfMemtargetGetType(NULL, NULL);
34+
EXPECT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
35+
auto hTarget = umfMemspaceMemtargetGet(memspace, 0);
36+
ASSERT_NE(hTarget, nullptr);
37+
ret = umfMemtargetGetType(hTarget, NULL);
38+
EXPECT_EQ(ret, UMF_RESULT_ERROR_INVALID_ARGUMENT);
39+
}

0 commit comments

Comments
 (0)