This source file includes following definitions.
- main
1
2
3
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
14
15
16
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
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
81
82
83
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 }