This source file includes following definitions.
- main
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 #include <stdbool.h>
  29 
  30 #define _GNU_SOURCE
  31 #include <stdio.h>
  32 #include <stdlib.h>
  33 #include <unistd.h>
  34 #include <time.h>
  35 #include <sys/param.h>
  36 
  37 #include <pmix.h>
  38 #include "examples.h"
  39 
  40 static pmix_proc_t myproc;
  41 
  42 int main(int argc, char **argv)
  43 {
  44     int rc;
  45     pmix_value_t value;
  46     pmix_value_t *val = &value;
  47     pmix_proc_t proc;
  48     uint32_t nprocs;
  49     char nsp2[PMIX_MAX_NSLEN+1];
  50     pmix_app_t *app;
  51     char hostname[1024], dir[1024];
  52     pmix_proc_t *peers;
  53     size_t npeers, ntmp=0;
  54     char *nodelist;
  55 
  56     if (0 > gethostname(hostname, sizeof(hostname))) {
  57         exit(1);
  58     }
  59     if (NULL == getcwd(dir, 1024)) {
  60         exit(1);
  61     }
  62 
  63     
  64     if (PMIX_SUCCESS != (rc = PMIx_Init(&myproc, NULL, 0))) {
  65         fprintf(stderr, "Client ns %s rank %d: PMIx_Init failed: %d\n", myproc.nspace, myproc.rank, rc);
  66         exit(0);
  67     }
  68     fprintf(stderr, "Client ns %s rank %d: Running\n", myproc.nspace, myproc.rank);
  69 
  70     PMIX_PROC_CONSTRUCT(&proc);
  71     (void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
  72     proc.rank = PMIX_RANK_WILDCARD;
  73 
  74     
  75     if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val))) {
  76         fprintf(stderr, "Client ns %s rank %d: PMIx_Get universe size failed: %d\n", myproc.nspace, myproc.rank, rc);
  77         goto done;
  78     }
  79     nprocs = val->data.uint32;
  80     PMIX_VALUE_RELEASE(val);
  81     fprintf(stderr, "Client %s:%d universe size %d\n", myproc.nspace, myproc.rank, nprocs);
  82 
  83     
  84     (void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
  85     proc.rank = PMIX_RANK_WILDCARD;
  86     if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
  87         fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
  88         goto done;
  89     }
  90 
  91     
  92     if (0 == myproc.rank) {
  93         PMIX_APP_CREATE(app, 1);
  94         if (0 > asprintf(&app->cmd, "%s/client", dir)) {
  95             exit(1);
  96         }
  97         app->maxprocs = 2;
  98         app->argv = (char**)malloc(2 * sizeof(char*));
  99         if (0 > asprintf(&app->argv[0], "%s/client", dir)) {
 100             exit(1);
 101         }
 102         app->argv[1] = NULL;
 103         app->env = (char**)malloc(2 * sizeof(char*));
 104         app->env[0] = strdup("PMIX_ENV_VALUE=3");
 105         app->env[1] = NULL;
 106         PMIX_INFO_CREATE(app->info, 2);
 107         (void)strncpy(app->info[0].key, "DARTH", PMIX_MAX_KEYLEN);
 108         app->info[0].value.type = PMIX_INT8;
 109         app->info[0].value.data.int8 = 12;
 110         (void)strncpy(app->info[1].key, "VADER", PMIX_MAX_KEYLEN);
 111         app->info[1].value.type = PMIX_DOUBLE;
 112         app->info[1].value.data.dval = 12.34;
 113 
 114         fprintf(stderr, "Client ns %s rank %d: calling PMIx_Spawn\n", myproc.nspace, myproc.rank);
 115         if (PMIX_SUCCESS != (rc = PMIx_Spawn(NULL, 0, app, 1, nsp2))) {
 116             fprintf(stderr, "Client ns %s rank %d: PMIx_Spawn failed: %d\n", myproc.nspace, myproc.rank, rc);
 117             goto done;
 118         }
 119         PMIX_APP_FREE(app, 1);
 120 
 121         
 122         val = NULL;
 123         (void)strncpy(proc.nspace, nsp2, PMIX_MAX_NSLEN);
 124         proc.rank = PMIX_RANK_WILDCARD;
 125         if (PMIX_SUCCESS != (rc = PMIx_Get(&proc, PMIX_UNIV_SIZE, NULL, 0, &val)) ||
 126             NULL == val) {
 127             fprintf(stderr, "Client ns %s rank %d: PMIx_Get universe size failed: %d\n", myproc.nspace, myproc.rank, rc);
 128             goto done;
 129         }
 130         ntmp = val->data.uint32;
 131         PMIX_VALUE_RELEASE(val);
 132         fprintf(stderr, "Client %s:%d universe %s size %d\n", myproc.nspace, myproc.rank, nsp2, (int)ntmp);
 133     }
 134 
 135     
 136     (void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
 137     proc.rank = PMIX_RANK_WILDCARD;
 138     if (PMIX_SUCCESS != (rc = PMIx_Connect(&proc, 1, NULL, 0))) {
 139         fprintf(stderr, "Client ns %s rank %d: PMIx_Connect failed: %d\n", myproc.nspace, myproc.rank, rc);
 140         goto done;
 141     }
 142     fprintf(stderr, "Client ns %s rank %d: PMIx_Connect succeeded\n",
 143             myproc.nspace, myproc.rank);
 144     if (PMIX_SUCCESS != (rc = PMIx_Disconnect(&proc, 1, NULL, 0))) {
 145         fprintf(stderr, "Client ns %s rank %d: PMIx_Disonnect failed: %d\n", myproc.nspace, myproc.rank, rc);
 146         goto done;
 147     }
 148     fprintf(stderr, "Client ns %s rank %d: PMIx_Disconnect succeeded\n", myproc.nspace, myproc.rank);
 149 
 150     
 151     if (0 == myproc.rank) {
 152         if (PMIX_SUCCESS != (rc = PMIx_Resolve_peers(hostname, NULL, &peers, &npeers))) {
 153             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers failed for nspace %s: %d\n", myproc.nspace, myproc.rank, nsp2, rc);
 154             goto done;
 155         }
 156         if ((nprocs+ntmp) != npeers) {
 157             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers returned incorrect npeers: %d vs %d\n", myproc.nspace, myproc.rank, (int)(nprocs+ntmp), (int)npeers);
 158             goto done;
 159         }
 160         fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers returned %d npeers\n", myproc.nspace, myproc.rank, (int)npeers);
 161         if (PMIX_SUCCESS != (rc = PMIx_Resolve_nodes(nsp2, &nodelist))) {
 162             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_nodes failed for nspace %s: %d\n", myproc.nspace, myproc.rank, nsp2, rc);
 163             goto done;
 164         }
 165         fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_nodes %s", myproc.nspace, myproc.rank, nodelist);
 166     } else {
 167         if (PMIX_SUCCESS != (rc = PMIx_Resolve_peers(hostname, myproc.nspace, &peers, &npeers))) {
 168             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers failed for nspace %s: %d\n", myproc.nspace, myproc.rank, myproc.nspace, rc);
 169             goto done;
 170         }
 171         if (nprocs != npeers) {
 172             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers returned incorrect npeers: %d vs %d\n", myproc.nspace, myproc.rank, nprocs, (int)npeers);
 173             goto done;
 174         }
 175         fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_peers returned %d npeers\n", myproc.nspace, myproc.rank, (int)npeers);
 176         if (PMIX_SUCCESS != (rc = PMIx_Resolve_nodes(myproc.nspace, &nodelist))) {
 177             fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_nodes failed: %d\n", myproc.nspace, myproc.rank, rc);
 178             goto done;
 179         }
 180         fprintf(stderr, "Client ns %s rank %d: PMIx_Resolve_nodes %s\n", myproc.nspace, myproc.rank, nodelist);
 181     }
 182     PMIX_PROC_FREE(peers, npeers);
 183     free(nodelist);
 184 
 185  done:
 186     
 187     (void)strncpy(proc.nspace, myproc.nspace, PMIX_MAX_NSLEN);
 188     proc.rank = PMIX_RANK_WILDCARD;
 189     if (PMIX_SUCCESS != (rc = PMIx_Fence(&proc, 1, NULL, 0))) {
 190         fprintf(stderr, "Client ns %s rank %d: PMIx_Fence failed: %d\n", myproc.nspace, myproc.rank, rc);
 191         goto done;
 192     }
 193 
 194     
 195     fprintf(stderr, "Client ns %s rank %d: Finalizing\n", myproc.nspace, myproc.rank);
 196 
 197     if (PMIX_SUCCESS != (rc = PMIx_Finalize(NULL, 0))) {
 198         fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize failed: %d\n", myproc.nspace, myproc.rank, rc);
 199     } else {
 200         fprintf(stderr, "Client ns %s rank %d:PMIx_Finalize successfully completed\n", myproc.nspace, myproc.rank);
 201     }
 202     fflush(stderr);
 203     return(0);
 204 }