Skip to content

Commit c0957cf

Browse files
kswiecickiigchor
authored andcommitted
Add memspace create from numa array
1 parent 4a9e12c commit c0957cf

File tree

4 files changed

+92
-5
lines changed

4 files changed

+92
-5
lines changed

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ set(UMF_SOURCES
1111
memory_target.c
1212
memory_targets/memory_target_numa.c
1313
memspace.c
14+
memspaces/memspace_numa.c
1415
pool/pool_disjoint.cpp
1516
provider/provider_os_memory.c
1617
provider/provider_tracking.c

src/memspace.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,7 @@
1414

1515
#include "memory_target.h"
1616
#include "memory_target_ops.h"
17-
18-
struct umf_memspace_t {
19-
size_t size;
20-
umf_memory_target_handle_t *nodes;
21-
};
17+
#include "memspace_internal.h"
2218

2319
#ifndef NDEBUG
2420
static enum umf_result_t verifyMemTargetsTypes(umf_memspace_handle_t memspace) {

src/memspace_internal.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/*
2+
*
3+
* Copyright (C) 2023 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_MEMSPACE_INTERNAL_H
11+
#define UMF_MEMSPACE_INTERNAL_H 1
12+
13+
#include "memory_target.h"
14+
15+
#ifdef __cplusplus
16+
extern "C" {
17+
#endif
18+
19+
struct umf_memspace_t {
20+
size_t size;
21+
umf_memory_target_handle_t *nodes;
22+
};
23+
24+
#ifdef __cplusplus
25+
}
26+
#endif
27+
28+
#endif /* UMF_MEMSPACE_INTERNAL_H */

src/memspaces/memspace_numa.c

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
*
3+
* Copyright (C) 2023 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+
#include <stdlib.h>
11+
12+
#include "../memory_targets/memory_target_numa.h"
13+
#include "../memspace_internal.h"
14+
#include <umf/memspaces/memspace_numa.h>
15+
16+
enum umf_result_t
17+
umfMemspaceCreateFromNumaArray(size_t *nodeIds, size_t numIds,
18+
umf_memspace_handle_t *hMemspace) {
19+
if (!nodeIds || numIds == 0 || !hMemspace) {
20+
return UMF_RESULT_ERROR_INVALID_ARGUMENT;
21+
}
22+
23+
enum umf_result_t ret = UMF_RESULT_SUCCESS;
24+
umf_memspace_handle_t memspace =
25+
(struct umf_memspace_t *)malloc(sizeof(struct umf_memspace_t));
26+
if (!memspace) {
27+
ret = UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
28+
goto err_memspace_alloc;
29+
}
30+
31+
memspace->size = numIds;
32+
memspace->nodes = (umf_memory_target_handle_t *)calloc(
33+
numIds, sizeof(umf_memory_target_handle_t));
34+
if (!memspace->nodes) {
35+
ret = UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY;
36+
goto err_nodes_alloc;
37+
}
38+
39+
size_t nodeIdx;
40+
for (nodeIdx = 0; nodeIdx < numIds; nodeIdx++) {
41+
struct umf_numa_memory_target_config_t config = {nodeIds[nodeIdx]};
42+
ret = umfMemoryTargetCreate(&UMF_MEMORY_TARGET_NUMA_OPS, &config,
43+
&memspace->nodes[nodeIdx]);
44+
if (ret) {
45+
goto err_target_create;
46+
}
47+
}
48+
49+
*hMemspace = memspace;
50+
51+
return UMF_RESULT_SUCCESS;
52+
53+
err_target_create:
54+
for (size_t i = 0; i < nodeIdx; i++) {
55+
umfMemoryTargetDestroy(memspace->nodes[i]);
56+
}
57+
free(memspace->nodes);
58+
err_nodes_alloc:
59+
free(memspace);
60+
err_memspace_alloc:
61+
return ret;
62+
}

0 commit comments

Comments
 (0)