/* * JOB_MAP */ int orte_dt_print_map(char **output, char *prefix, orte_job_map_t *src, opal_data_type_t type) { char *tmp=NULL, *tmp2, *tmp3, *pfx, *pfx2; int32_t i, j; int rc; orte_node_t *node; orte_proc_t *proc; /* set default result */ *output = NULL; /* protect against NULL prefix */ if (NULL == prefix) { asprintf(&pfx2, " "); } else { asprintf(&pfx2, "%s", prefix); } if (orte_xml_output) { /* need to create the output in XML format */ asprintf(&tmp, "<map>\n"); /* loop through nodes */ for (i=0; i < src->nodes->size; i++) { if (NULL == (node = (orte_node_t*)opal_pointer_array_get_item(src->nodes, i))) { continue; } orte_dt_print_node(&tmp2, "\t", node, ORTE_NODE); asprintf(&tmp3, "%s%s", tmp, tmp2); free(tmp2); free(tmp); tmp = tmp3; /* for each node, loop through procs and print their rank */ for (j=0; j < node->procs->size; j++) { if (NULL == (proc = (orte_proc_t*)opal_pointer_array_get_item(node->procs, j))) { continue; } orte_dt_print_proc(&tmp2, "\t\t", proc, ORTE_PROC); asprintf(&tmp3, "%s%s", tmp, tmp2); free(tmp2); free(tmp); tmp = tmp3; } asprintf(&tmp3, "%s\t</host>\n", tmp); free(tmp); tmp = tmp3; } asprintf(&tmp2, "%s</map>\n", tmp); free(tmp); free(pfx2); *output = tmp2; return ORTE_SUCCESS; } asprintf(&pfx, "%s\t", pfx2); if (orte_devel_level_output) { #if OPAL_HAVE_HWLOC asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s\n%sBinding policy: %s Cpu set: %s PPR: %s Cpus-per-rank: %d", pfx2, (NULL == src->req_mapper) ? "NULL" : src->req_mapper, (NULL == src->last_mapper) ? "NULL" : src->last_mapper, orte_rmaps_base_print_mapping(src->mapping), orte_rmaps_base_print_ranking(src->ranking), pfx2, opal_hwloc_base_print_binding(src->binding), (NULL == opal_hwloc_base_cpu_set) ? "NULL" : opal_hwloc_base_cpu_set, (NULL == src->ppr) ? "NULL" : src->ppr, (int)src->cpus_per_rank); #else asprintf(&tmp, "\n%sMapper requested: %s Last mapper: %s Mapping policy: %s Ranking policy: %s PPR: %s Cpus-per-rank: %d", pfx2, (NULL == src->req_mapper) ? "NULL" : src->req_mapper, (NULL == src->last_mapper) ? "NULL" : src->last_mapper, orte_rmaps_base_print_mapping(src->mapping), orte_rmaps_base_print_ranking(src->ranking), (NULL == src->ppr) ? "NULL" : src->ppr, (int)src->cpus_per_rank); #endif if (ORTE_VPID_INVALID == src->daemon_vpid_start) { asprintf(&tmp2, "%s\n%sNum new daemons: %ld\tNew daemon starting vpid INVALID\n%sNum nodes: %ld", tmp, pfx, (long)src->num_new_daemons, pfx, (long)src->num_nodes); } else { asprintf(&tmp2, "%s\n%sNum new daemons: %ld\tNew daemon starting vpid %ld\n%sNum nodes: %ld", tmp, pfx, (long)src->num_new_daemons, (long)src->daemon_vpid_start, pfx, (long)src->num_nodes); } free(tmp); tmp = tmp2; } else { /* this is being printed for a user, so let's make it easier to see */ asprintf(&tmp, "\n%s======================== JOB MAP ========================", pfx2); } for (i=0; i < src->nodes->size; i++) { if (NULL == (node = (orte_node_t*)opal_pointer_array_get_item(src->nodes, i))) { continue; } if (ORTE_SUCCESS != (rc = opal_dss.print(&tmp2, pfx2, node, ORTE_NODE))) { ORTE_ERROR_LOG(rc); free(pfx); free(tmp); return rc; } asprintf(&tmp3, "%s\n%s", tmp, tmp2); free(tmp); free(tmp2); tmp = tmp3; } if (!orte_devel_level_output) { /* this is being printed for a user, so let's make it easier to see */ asprintf(&tmp2, "%s\n\n%s=============================================================\n", tmp, pfx2); free(tmp); tmp = tmp2; } free(pfx2); /* set the return */ *output = tmp; free(pfx); return ORTE_SUCCESS; }
/* * JOB_MAP */ int orte_dt_print_map(char **output, char *prefix, orte_job_map_t *src, opal_data_type_t type) { char *tmp=NULL, *tmp2, *tmp3, *pfx, *pfx2; int32_t i, j; int rc; orte_node_t **nodes; orte_proc_t **procs; /* set default result */ *output = NULL; /* protect against NULL prefix */ if (NULL == prefix) { asprintf(&pfx2, " "); } else { asprintf(&pfx2, "%s", prefix); } if (orte_xml_output) { /* need to create the output in XML format */ asprintf(&tmp, "<map>\n"); /* loop through nodes */ nodes = (orte_node_t**)src->nodes->addr; for (i=0; i < src->nodes->size; i++) { if (NULL == nodes[i]) { break; } orte_dt_print_node(&tmp2, "\t", nodes[i], ORTE_NODE); asprintf(&tmp3, "%s%s", tmp, tmp2); free(tmp2); free(tmp); tmp = tmp3; /* for each node, loop through procs and print their rank */ procs = (orte_proc_t**)nodes[i]->procs->addr; for (j=0; j < nodes[i]->procs->size; j++) { if (NULL == procs[j]) { break; } orte_dt_print_proc(&tmp2, "\t\t", procs[j], ORTE_PROC); asprintf(&tmp3, "%s%s", tmp, tmp2); free(tmp2); free(tmp); tmp = tmp3; } asprintf(&tmp3, "%s\t</host>\n", tmp); free(tmp); tmp = tmp3; } asprintf(&tmp2, "%s</map>\n", tmp); free(tmp); free(pfx2); *output = tmp2; return ORTE_SUCCESS; } asprintf(&pfx, "%s\t", pfx2); if (orte_devel_level_output) { asprintf(&tmp, "\n%sMap generated by mapping policy: %04x\n%s\tNpernode: %ld\tOversubscribe allowed: %s\tCPU Lists: %s", pfx2, src->policy, pfx2, (long)src->npernode, (src->oversubscribe) ? "TRUE" : "FALSE", (src->cpu_lists) ? "TRUE" : "FALSE"); if (ORTE_VPID_INVALID == src->daemon_vpid_start) { asprintf(&tmp2, "%s\n%sNum new daemons: %ld\tNew daemon starting vpid INVALID\n%sNum nodes: %ld", tmp, pfx, (long)src->num_new_daemons, pfx, (long)src->num_nodes); } else { asprintf(&tmp2, "%s\n%sNum new daemons: %ld\tNew daemon starting vpid %ld\n%sNum nodes: %ld", tmp, pfx, (long)src->num_new_daemons, (long)src->daemon_vpid_start, pfx, (long)src->num_nodes); } free(tmp); tmp = tmp2; } else { /* this is being printed for a user, so let's make it easier to see */ asprintf(&tmp, "\n%s======================== JOB MAP ========================", pfx2); } for (i=0; i < src->nodes->size; i++) { if (NULL != src->nodes->addr[i]) { if (ORTE_SUCCESS != (rc = opal_dss.print(&tmp2, pfx2, src->nodes->addr[i], ORTE_NODE))) { ORTE_ERROR_LOG(rc); free(pfx); free(tmp); return rc; } asprintf(&tmp3, "%s\n%s", tmp, tmp2); free(tmp); free(tmp2); tmp = tmp3; } } if (!orte_devel_level_output) { /* this is being printed for a user, so let's make it easier to see */ asprintf(&tmp2, "%s\n\n%s=============================================================\n", tmp, pfx2); free(tmp); tmp = tmp2; } free(pfx2); /* set the return */ *output = tmp; free(pfx); return ORTE_SUCCESS; }