Skip to content

Commit 81691f6

Browse files
committed
Add umfMemspaceMemtarget[Num|Get]
1 parent 6f74530 commit 81691f6

File tree

5 files changed

+57
-0
lines changed

5 files changed

+57
-0
lines changed

include/umf/memspace.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <umf/memory_pool.h>
1515
#include <umf/memory_provider.h>
1616
#include <umf/mempolicy.h>
17+
#include <umf/memtarget.h>
1718

1819
#ifdef __cplusplus
1920
extern "C" {
@@ -84,6 +85,21 @@ umf_const_memspace_handle_t umfMemspaceHighestBandwidthGet(void);
8485
///
8586
umf_const_memspace_handle_t umfMemspaceLowestLatencyGet(void);
8687

88+
/// \brief Returns number of memory targets in memspace.
89+
/// \param hMemspace handle to memspace
90+
/// \return number of memory targets in memspace
91+
///
92+
unsigned umfMemspaceMemtargetNum(umf_const_memspace_handle_t hMemspace);
93+
94+
/// \brief Returns memory target by index.
95+
/// \param hMemspace handle to memspace
96+
/// \param targetNum index of the memory target
97+
/// \return memory target handle on success or NULL on invalid input.
98+
///
99+
umf_const_memtarget_handle_t
100+
umfMemspaceMemtargetGet(umf_const_memspace_handle_t hMemspace,
101+
unsigned targetNum);
102+
87103
#ifdef __cplusplus
88104
}
89105
#endif

src/libumf.def.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ EXPORTS
4141
umfMempolicySetCustomSplitPartitions
4242
umfMempolicySetInterleavePartSize
4343
umfMemspaceDestroy
44+
umfMemspaceMemtargetNum
45+
umfMemspaceMemtargetGet
4446
umfOpenIPCHandle
4547
umfOsMemoryProviderOps
4648
umfPoolAlignedMalloc

src/libumf.map

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ UMF_1.0 {
3737
umfMempolicySetInterleavePartSize;
3838
umfMemspaceCreateFromNumaArray;
3939
umfMemspaceDestroy;
40+
umfMemspaceMemtargetNum;
41+
umfMemspaceMemtargetGet;
4042
umfMemspaceHighestBandwidthGet;
4143
umfMemspaceHighestCapacityGet;
4244
umfMemspaceHostAllGet;

src/memspace.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,3 +292,19 @@ umf_result_t umfMemspaceFilter(umf_const_memspace_handle_t hMemspace,
292292
umf_ba_global_free(uniqueBestNodes);
293293
return ret;
294294
}
295+
296+
unsigned umfMemspaceMemtargetNum(umf_const_memspace_handle_t hMemspace) {
297+
if (!hMemspace) {
298+
return 0;
299+
}
300+
return hMemspace->size;
301+
}
302+
303+
umf_const_memtarget_handle_t
304+
umfMemspaceMemtargetGet(umf_const_memspace_handle_t hMemspace,
305+
unsigned targetNum) {
306+
if (!hMemspace || targetNum >= hMemspace->size) {
307+
return NULL;
308+
}
309+
return hMemspace->nodes[targetNum];
310+
}

test/memspaces/memspace_numa.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "memspace_fixtures.hpp"
77
#include "memspace_helpers.hpp"
88
#include "memspace_internal.h"
9+
#include "umf/memspace.h"
910

1011
#include <umf/providers/provider_os_memory.h>
1112

@@ -56,6 +57,10 @@ TEST_F(numaNodesTest, createDestroy) {
5657
nodeIds.data(), nodeIds.size(), &hMemspace);
5758
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
5859
ASSERT_NE(hMemspace, nullptr);
60+
EXPECT_EQ(umfMemspaceMemtargetNum(hMemspace), nodeIds.size());
61+
for (unsigned i = 0; i < umfMemspaceMemtargetNum(hMemspace); ++i) {
62+
EXPECT_NE(umfMemspaceMemtargetGet(hMemspace, i), nullptr);
63+
}
5964

6065
umfMemspaceDestroy(hMemspace);
6166
}
@@ -91,6 +96,22 @@ TEST_F(memspaceNumaTest, providerFromNumaMemspace) {
9196
umfMemoryProviderDestroy(hProvider);
9297
}
9398

99+
TEST_F(numaNodesTest, memtargetsInvalid) {
100+
umf_memspace_handle_t hMemspace = nullptr;
101+
EXPECT_EQ(umfMemspaceMemtargetNum(nullptr), 0);
102+
EXPECT_EQ(umfMemspaceMemtargetGet(nullptr, 0), nullptr);
103+
104+
umf_result_t ret = umfMemspaceCreateFromNumaArray(
105+
nodeIds.data(), nodeIds.size(), &hMemspace);
106+
ASSERT_EQ(ret, UMF_RESULT_SUCCESS);
107+
ASSERT_NE(hMemspace, nullptr);
108+
109+
ASSERT_EQ(umfMemspaceMemtargetNum(hMemspace), nodeIds.size());
110+
EXPECT_EQ(umfMemspaceMemtargetGet(hMemspace, nodeIds.size()), nullptr);
111+
112+
umfMemspaceDestroy(hMemspace);
113+
}
114+
94115
TEST_F(memspaceNumaProviderTest, allocFree) {
95116
void *ptr = nullptr;
96117
size_t size = SIZE_4K;

0 commit comments

Comments
 (0)