@@ -467,13 +467,16 @@ void orte_rmaps_base_display_map(orte_job_t *jdata)
467467 continue ;
468468 }
469469 memset (tmp1 , 0 , 1024 );
470- orte_get_attribute (& proc -> attributes , ORTE_PROC_HWLOC_BOUND , (void * * )& bd , OPAL_PTR );
471- if (NULL == bd ) {
472- (void )strncpy (tmp1 , "UNBOUND" , strlen ("UNBOUND" ));
473- } else {
474- if (OPAL_ERR_NOT_BOUND == opal_hwloc_base_cset2mapstr (tmp1 , sizeof (tmp1 ), node -> topology -> topo , bd -> cpuset )) {
470+ if (orte_get_attribute (& proc -> attributes , ORTE_PROC_HWLOC_BOUND , (void * * )& bd , OPAL_PTR )) {
471+ if (NULL == bd ) {
475472 (void )strncpy (tmp1 , "UNBOUND" , strlen ("UNBOUND" ));
473+ } else {
474+ if (OPAL_ERR_NOT_BOUND == opal_hwloc_base_cset2mapstr (tmp1 , sizeof (tmp1 ), node -> topology -> topo , bd -> cpuset )) {
475+ (void )strncpy (tmp1 , "UNBOUND" , strlen ("UNBOUND" ));
476+ }
476477 }
478+ } else {
479+ (void )strncpy (tmp1 , "UNBOUND" , strlen ("UNBOUND" ));
477480 }
478481 opal_output (orte_clean_output , "\t\t<process rank=%s app_idx=%ld local_rank=%lu node_rank=%lu binding=%s>" ,
479482 ORTE_VPID_PRINT (proc -> name .vpid ), (long )proc -> app_idx ,
@@ -488,29 +491,33 @@ void orte_rmaps_base_display_map(orte_job_t *jdata)
488491 node = (orte_node_t * )opal_pointer_array_get_item (jdata -> map -> nodes , 0 );
489492 p0 = (orte_proc_t * )opal_pointer_array_get_item (node -> procs , 0 );
490493 p0bitmap = NULL ;
491- orte_get_attribute (& p0 -> attributes , ORTE_PROC_CPU_BITMAP , (void * * )& p0bitmap , OPAL_STRING );
492- opal_output (orte_clean_output , "\t<locality>" );
493- for (j = 1 ; j < node -> procs -> size ; j ++ ) {
494- if (NULL == (proc = (orte_proc_t * )opal_pointer_array_get_item (node -> procs , j ))) {
495- continue ;
494+ if (orte_get_attribute (& p0 -> attributes , ORTE_PROC_CPU_BITMAP , (void * * )& p0bitmap , OPAL_STRING ) &&
495+ NULL != p0bitmap ) {
496+ opal_output (orte_clean_output , "\t<locality>" );
497+ for (j = 1 ; j < node -> procs -> size ; j ++ ) {
498+ if (NULL == (proc = (orte_proc_t * )opal_pointer_array_get_item (node -> procs , j ))) {
499+ continue ;
500+ }
501+ procbitmap = NULL ;
502+ if (orte_get_attribute (& proc -> attributes , ORTE_PROC_CPU_BITMAP , (void * * )& procbitmap , OPAL_STRING ) &&
503+ NULL != procbitmap ) {
504+ locality = opal_hwloc_base_get_relative_locality (node -> topology -> topo ,
505+ p0bitmap ,
506+ procbitmap );
507+ opal_output (orte_clean_output , "\t\t<rank=%s rank=%s locality=%s>" ,
508+ ORTE_VPID_PRINT (p0 -> name .vpid ),
509+ ORTE_VPID_PRINT (proc -> name .vpid ),
510+ opal_hwloc_base_print_locality (locality ));
511+ }
512+ }
513+ opal_output (orte_clean_output , "\t</locality>\n</map>" );
514+ fflush (stderr );
515+ if (NULL != p0bitmap ) {
516+ free (p0bitmap );
517+ }
518+ if (NULL != procbitmap ) {
519+ free (procbitmap );
496520 }
497- procbitmap = NULL ;
498- orte_get_attribute (& proc -> attributes , ORTE_PROC_CPU_BITMAP , (void * * )& procbitmap , OPAL_STRING );
499- locality = opal_hwloc_base_get_relative_locality (node -> topology -> topo ,
500- p0bitmap ,
501- procbitmap );
502- opal_output (orte_clean_output , "\t\t<rank=%s rank=%s locality=%s>" ,
503- ORTE_VPID_PRINT (p0 -> name .vpid ),
504- ORTE_VPID_PRINT (proc -> name .vpid ),
505- opal_hwloc_base_print_locality (locality ));
506- }
507- opal_output (orte_clean_output , "\t</locality>\n</map>" );
508- fflush (stderr );
509- if (NULL != p0bitmap ) {
510- free (p0bitmap );
511- }
512- if (NULL != procbitmap ) {
513- free (procbitmap );
514521 }
515522 } else {
516523 opal_output (orte_clean_output , " Data for JOB %s offset %s" , ORTE_JOBID_PRINT (jdata -> jobid ), ORTE_VPID_PRINT (jdata -> offset ));
0 commit comments