12
12
* Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved.
13
13
* Copyright (c) 2011-2012 Los Alamos National Security, LLC.
14
14
* All rights reserved.
15
- * Copyright (c) 2014-2016 Intel, Inc. All rights reserved.
15
+ * Copyright (c) 2014-2017 Intel, Inc. All rights reserved.
16
16
* Copyright (c) 2016 Research Organization for Information Science
17
17
* and Technology (RIST). All rights reserved.
18
18
* $COPYRIGHT$
@@ -149,9 +149,21 @@ void orte_rmaps_base_map_job(int fd, short args, void *cbdata)
149
149
ORTE_SET_MAPPING_POLICY (jdata -> map -> mapping , ORTE_MAPPING_BYCORE );
150
150
}
151
151
} else {
152
- opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
153
- "mca:rmaps[%d] mapping not set by user - using bysocket" , __LINE__ );
154
- ORTE_SET_MAPPING_POLICY (jdata -> map -> mapping , ORTE_MAPPING_BYSOCKET );
152
+ /* if NUMA is available, map by that */
153
+ if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_NODE , 0 )) {
154
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
155
+ "mca:rmaps[%d] mapping not set by user - using bynuma" , __LINE__ );
156
+ ORTE_SET_MAPPING_POLICY (jdata -> map -> mapping , ORTE_MAPPING_BYNUMA );
157
+ } else if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_SOCKET , 0 )) {
158
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
159
+ "mca:rmaps[%d] mapping not set by user and no NUMA - using bysocket" , __LINE__ );
160
+ ORTE_SET_MAPPING_POLICY (jdata -> map -> mapping , ORTE_MAPPING_BYSOCKET );
161
+ } else {
162
+ /* if we have neither, then just do by slot */
163
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
164
+ "mca:rmaps[%d] mapping not given and no NUMA or sockets - using byslot" , __LINE__ );
165
+ ORTE_SET_MAPPING_POLICY (jdata -> map -> mapping , ORTE_MAPPING_BYSLOT );
166
+ }
155
167
}
156
168
}
157
169
}
@@ -255,10 +267,20 @@ void orte_rmaps_base_map_job(int fd, short args, void *cbdata)
255
267
OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_CORE );
256
268
}
257
269
} else {
258
- /* for performance, bind to NUMA */
259
- opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
260
- "mca:rmaps[%d] binding not given - using bynuma" , __LINE__ );
261
- OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NUMA );
270
+ if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_NODE , 0 )) {
271
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
272
+ "mca:rmaps[%d] binding not given - using bynuma" , __LINE__ );
273
+ OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NUMA );
274
+ } else if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_SOCKET , 0 )) {
275
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
276
+ "mca:rmaps[%d] binding not given and no NUMA - using bysocket" , __LINE__ );
277
+ OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_SOCKET );
278
+ } else {
279
+ /* if we have neither, then just don't bind */
280
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
281
+ "mca:rmaps[%d] binding not given and no NUMA or sockets - not binding" , __LINE__ );
282
+ OPAL_SET_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NONE );
283
+ }
262
284
}
263
285
}
264
286
} else if (nprocs <= 2 ) {
@@ -274,10 +296,21 @@ void orte_rmaps_base_map_job(int fd, short args, void *cbdata)
274
296
OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_CORE );
275
297
}
276
298
} else {
277
- /* for performance, bind to NUMA */
278
- opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
279
- "mca:rmaps[%d] binding not given - using bynuma" , __LINE__ );
280
- OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NUMA );
299
+ /* for performance, bind to NUMA, if available */
300
+ if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_NODE , 0 )) {
301
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
302
+ "mca:rmaps[%d] binding not given - using bynuma" , __LINE__ );
303
+ OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NUMA );
304
+ } else if (NULL != hwloc_get_obj_by_type (opal_hwloc_topology , HWLOC_OBJ_SOCKET , 0 )) {
305
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
306
+ "mca:rmaps[%d] binding not given and no NUMA - using bysocket" , __LINE__ );
307
+ OPAL_SET_DEFAULT_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_SOCKET );
308
+ } else {
309
+ /* if we have neither, then just don't bind */
310
+ opal_output_verbose (5 , orte_rmaps_base_framework .framework_output ,
311
+ "mca:rmaps[%d] binding not given and no NUMA or sockets - not binding" , __LINE__ );
312
+ OPAL_SET_BINDING_POLICY (jdata -> map -> binding , OPAL_BIND_TO_NONE );
313
+ }
281
314
}
282
315
if (OPAL_BIND_OVERLOAD_ALLOWED (opal_hwloc_binding_policy )) {
283
316
jdata -> map -> binding |= OPAL_BIND_ALLOW_OVERLOAD ;
0 commit comments