root/orte/test/system/getenv_pmi.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 /*
   2  * Copyright (c) 2011      Los Alamos National Security, LLC.
   3  *                         All rights reserved.
   4  */
   5 
   6 #include <stdio.h>
   7 #include <stdlib.h>
   8 #include <sys/types.h>
   9 #include <unistd.h>
  10 
  11 #include "pmi.h"
  12 
  13 /* NOTES
  14  *
  15  * useful debug environment variables:
  16  * PMI_DEBUG
  17  */
  18 
  19 int main(int argc, char **argv, char **envp)
  20 {
  21     int pmi_rank = -1;
  22     int pmi_process_group_size = -1;
  23     int num_local_procs = 0;
  24     int *local_rank_ids = NULL;
  25     int spawned = PMI_FALSE;
  26     int rc = EXIT_SUCCESS;
  27     char *err = NULL;
  28     PMI_BOOL pmi_initialized = PMI_FALSE;
  29     int pmi_vallen_max, max_length;
  30     char *pmi_kvs_name;
  31 
  32     /* sanity */
  33     if (PMI_SUCCESS != PMI_Initialized(&pmi_initialized) ||
  34         PMI_TRUE == pmi_initialized) {
  35         fprintf(stderr, "=== ERROR: PMI sanity failure\n");
  36         return EXIT_FAILURE;
  37     }
  38     if (PMI_SUCCESS != PMI_Init(&spawned)) {
  39         err = "PMI_Init failure!";
  40         goto done;
  41     }
  42     if (PMI_SUCCESS != PMI_Get_size(&pmi_process_group_size)) {
  43         err = "PMI_Get_size failure!";
  44         goto done;
  45     }
  46     if (PMI_SUCCESS != PMI_Get_rank(&pmi_rank)) {
  47         err = "PMI_Get_rank failure!";
  48         goto done;
  49     }
  50     if (PMI_SUCCESS != PMI_Get_clique_size(&num_local_procs)) {
  51         err = "PMI_Get_clique_size failure!";
  52         goto done;
  53     }
  54     if (PMI_SUCCESS != PMI_KVS_Get_value_length_max(&pmi_vallen_max)) {
  55         err = "PMI_KVS_Get_value_length_max failure!";
  56         goto done;
  57     }
  58     if (PMI_SUCCESS != PMI_KVS_Get_name_length_max(&max_length)) {
  59         err = "PMI_KVS_Get_name_length_max failure!";
  60         goto done;
  61     }
  62     pmi_kvs_name = (char*)malloc(max_length);
  63     if (NULL == pmi_kvs_name) {
  64         err = "malloc failure!";
  65         goto done;
  66     }
  67     if (PMI_SUCCESS != PMI_KVS_Get_my_name(pmi_kvs_name,max_length)) {
  68         err = "PMI_KVS_Get_my_name failure!";
  69         goto done;
  70     }
  71 
  72     if (NULL == (local_rank_ids = calloc(num_local_procs, sizeof(int)))) {
  73         err = "out of resources";
  74         goto done;
  75     }
  76     if (PMI_SUCCESS != PMI_Get_clique_ranks(local_rank_ids, num_local_procs)) {
  77         err = "PMI_Get_clique_size failure!";
  78         goto done;
  79     }
  80     /* lowest local rank will print env info and tag its output*/
  81     //    if (pmi_rank == local_rank_ids[0]) {
  82     //  for (; NULL != envp && NULL != *envp; ++envp) {
  83     //      printf("===[%d]: %s\n",  pmi_rank, *envp);
  84     //  }
  85     //}
  86 
  87 done:
  88     if (PMI_TRUE == pmi_initialized) {
  89         if (PMI_SUCCESS != PMI_Finalize()) {
  90             err = "PMI_Finalize failure!";
  91         }
  92     }
  93     if (NULL != err) {
  94         fprintf(stderr, "=== ERROR [rank:%d] %s\n", pmi_rank, err);
  95         rc = EXIT_FAILURE;
  96     }
  97     return rc;
  98 }

/* [<][>][^][v][top][bottom][index][help] */