static int _set_mapsinfo(List lresp) { pmix_info_t *kvp; char *regexp, *input; pmixp_namespace_t *nsptr = pmixp_nspaces_local(); hostlist_t hl = nsptr->hl; int rc, i, j; int count = hostlist_count(hl); input = hostlist_deranged_string_malloc(hl); rc = PMIx_generate_regex(input, ®exp); free(input); if (PMIX_SUCCESS != rc) { return SLURM_ERROR; } PMIXP_ALLOC_KEY(kvp, PMIX_NODE_MAP); PMIX_VAL_SET(&kvp->value, string, regexp); regexp = NULL; list_append(lresp, kvp); input = NULL; for (i = 0; i < count; i++) { /* for each node - run through all tasks and * record taskid's that reside on this node */ int first = 1; for (j = 0; j < nsptr->ntasks; j++) { if (nsptr->task_map[j] == i) { if (first) { first = 0; } else { xstrfmtcat(input, ","); } xstrfmtcat(input, "%u", j); } } if (i < (count - 1)) { xstrfmtcat(input, ";"); } } rc = PMIx_generate_ppn(input, ®exp); xfree(input); if (PMIX_SUCCESS != rc) { return SLURM_ERROR; } PMIXP_ALLOC_KEY(kvp, PMIX_PROC_MAP); PMIX_VAL_SET(&kvp->value, string, regexp); regexp = NULL; list_append(lresp, kvp); PMIXP_ALLOC_KEY(kvp, PMIX_ANL_MAP); PMIX_VAL_SET(&kvp->value, string, pmixp_info_task_map()); regexp = NULL; list_append(lresp, kvp); return SLURM_SUCCESS; }
static void set_namespace(int nprocs, char *ranks, char *name) { size_t ninfo; pmix_info_t *info; ninfo = 8; char *regex, *ppn; PMIX_INFO_CREATE(info, ninfo); (void)strncpy(info[0].key, PMIX_UNIV_SIZE, PMIX_MAX_KEYLEN); info[0].value.type = PMIX_UINT32; info[0].value.data.uint32 = nprocs; (void)strncpy(info[1].key, PMIX_SPAWNED, PMIX_MAX_KEYLEN); info[1].value.type = PMIX_UINT32; info[1].value.data.uint32 = 0; (void)strncpy(info[2].key, PMIX_LOCAL_SIZE, PMIX_MAX_KEYLEN); info[2].value.type = PMIX_UINT32; info[2].value.data.uint32 = nprocs; (void)strncpy(info[3].key, PMIX_LOCAL_PEERS, PMIX_MAX_KEYLEN); info[3].value.type = PMIX_STRING; info[3].value.data.string = strdup(ranks); PMIx_generate_regex(NODE_NAME, ®ex); (void)strncpy(info[4].key, PMIX_NODE_MAP, PMIX_MAX_KEYLEN); info[4].value.type = PMIX_STRING; info[4].value.data.string = regex; PMIx_generate_ppn(ranks, &ppn); (void)strncpy(info[5].key, PMIX_PROC_MAP, PMIX_MAX_KEYLEN); info[5].value.type = PMIX_STRING; info[5].value.data.string = ppn; (void)strncpy(info[6].key, PMIX_JOB_SIZE, PMIX_MAX_KEYLEN); info[6].value.type = PMIX_UINT32; info[6].value.data.uint32 = nprocs; (void)strncpy(info[7].key, PMIX_APPNUM, PMIX_MAX_KEYLEN); info[7].value.type = PMIX_UINT32; info[7].value.data.uint32 = getpid (); int in_progress = 1, rc; if (PMIX_SUCCESS == (rc = PMIx_server_register_nspace(name, nprocs, info, ninfo, release_cb, &in_progress))) { PMIX_WAIT_FOR_COMPLETION(in_progress); } PMIX_INFO_FREE(info, ninfo); }