Skip to content

Commit 3710c9b

Browse files
Merge pull request #631 from lplewa/MemtargetGet
Add umfMemspaceMemtarget[Num|Get]
2 parents 1c34aae + f4b768a commit 3710c9b

File tree

5 files changed

+58
-1
lines changed

5 files changed

+58
-1
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+
size_t 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+
size_t 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: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2023 Intel Corporation
1+
// Copyright (C) 2023-2024 Intel Corporation
22
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

@@ -7,6 +7,7 @@
77
#include "memspace_helpers.hpp"
88
#include "memspace_internal.h"
99

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

1213
struct memspaceNumaTest : ::numaNodesTest {
@@ -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 (size_t 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)