This source file includes following definitions.
- opal_hwloc_base_set_process_membind_policy
1
2
3
4
5
6
7
8
9
10
11 #include "opal_config.h"
12
13 #include "opal/constants.h"
14
15 #include "opal/mca/hwloc/hwloc-internal.h"
16 #include "opal/mca/hwloc/base/base.h"
17
18
19
20
21
22
23
24
25
26 int opal_hwloc_base_set_process_membind_policy(void)
27 {
28 int rc = 0, flags;
29 hwloc_membind_policy_t policy;
30 hwloc_cpuset_t cpuset;
31
32
33
34 if (NULL == opal_hwloc_topology) {
35 return OPAL_ERR_BAD_PARAM;
36 }
37
38
39
40 switch (opal_hwloc_base_map) {
41 case OPAL_HWLOC_BASE_MAP_LOCAL_ONLY:
42 policy = HWLOC_MEMBIND_BIND;
43 flags = HWLOC_MEMBIND_STRICT;
44 break;
45
46 case OPAL_HWLOC_BASE_MAP_NONE:
47 default:
48 policy = HWLOC_MEMBIND_DEFAULT;
49 flags = 0;
50 break;
51 }
52
53 cpuset = hwloc_bitmap_alloc();
54 if (NULL == cpuset) {
55 rc = OPAL_ERR_OUT_OF_RESOURCE;
56 } else {
57 int e;
58 hwloc_get_cpubind(opal_hwloc_topology, cpuset, 0);
59 rc = hwloc_set_membind(opal_hwloc_topology,
60 cpuset, policy, flags);
61 e = errno;
62 hwloc_bitmap_free(cpuset);
63
64
65
66
67 if (0 != rc && ENOSYS == e &&
68 OPAL_HWLOC_BASE_MAP_NONE == opal_hwloc_base_map) {
69 rc = 0;
70 }
71 }
72
73 return (0 == rc) ? OPAL_SUCCESS : OPAL_ERROR;
74 }