@@ -32,14 +32,14 @@ slurm block distro of 4 ranks over 2 nodes:
3232 Tuple can be visualized as a rectangle on two
3333 dimensional (Hosts, Local Ranks) plane:
3434
35- ------------------------------------ Hosts ->
36- | H
37- | +--------+
38- |<- base -->| |
39- | | | L
40- | +--------+
41- Local Ranks
42- V
35+ ------------------------------------ Hosts ->
36+ | H
37+ | +--------+
38+ |<- base -->| |
39+ | | | L
40+ | +--------+
41+ Local Ranks
42+ V
4343
4444Note that ranks increase by column. Tuple (0,2,3) looks like:
45450 3
@@ -59,14 +59,14 @@ static int find_my_node(char *map, int me)
5959 p = map ;
6060 abs_rank = 0 ;
6161 while (NULL != (p = strstr (p + 1 , ",(" ))) {
62- if (3 != sscanf (p , ",(%d,%d,%d)" , & base , & H , & L )) {
63- return -1 ;
64- }
65- if (me >= abs_rank && me < abs_rank + H * L ) {
66- /* found my rectangle, compute node */
67- return base + (me - abs_rank )/L ;
68- }
69- abs_rank += H * L ;
62+ if (3 != sscanf (p , ",(%d,%d,%d)" , & base , & H , & L )) {
63+ return -1 ;
64+ }
65+ if (me >= abs_rank && me < abs_rank + H * L ) {
66+ /* found my rectangle, compute node */
67+ return base + (me - abs_rank )/L ;
68+ }
69+ abs_rank += H * L ;
7070 }
7171 return -1 ;
7272}
@@ -86,34 +86,34 @@ static int *find_lrs(char *map, int my_node, int *nlrs)
8686 max_lr = 16 ;
8787 lrs = malloc (max_lr * sizeof (int ));
8888 while (NULL != (p = strstr (p + 1 , ",(" ))) {
89- if (3 != sscanf (p , ",(%d,%d,%d)" , & base , & H , & L )) {
90- free (lrs );
91- return NULL ;
92- }
93- if (base <= my_node && my_node < base + H ) {
94- if (* nlrs + L >= max_lr ) {
95- lrs = realloc (lrs , (max_lr + L ) * sizeof (int ));
96- if (NULL == lrs ) {
97- * nlrs = 0 ;
98- free (lrs );
99- return NULL ;
100- }
101- max_lr += L ;
102- }
103- /* skip (my_node - base) columns of L elems,
104- * numbers in my column are local to me
105- */
106- for (i = 0 ; i < L ; i ++ ) {
107- lrs [* nlrs ] = (my_node - base ) * L + i + abs_rank ;
108- (* nlrs ) ++ ;
109- }
110- }
111- abs_rank += H * L ;
89+ if (3 != sscanf (p , ",(%d,%d,%d)" , & base , & H , & L )) {
90+ free (lrs );
91+ return NULL ;
92+ }
93+ if (base <= my_node && my_node < base + H ) {
94+ if (* nlrs + L >= max_lr ) {
95+ lrs = realloc (lrs , (max_lr + L ) * sizeof (int ));
96+ if (NULL == lrs ) {
97+ * nlrs = 0 ;
98+ free (lrs );
99+ return NULL ;
100+ }
101+ max_lr += L ;
102+ }
103+ /* skip (my_node - base) columns of L elems,
104+ * numbers in my column are local to me
105+ */
106+ for (i = 0 ; i < L ; i ++ ) {
107+ lrs [* nlrs ] = (my_node - base ) * L + i + abs_rank ;
108+ (* nlrs ) ++ ;
109+ }
110+ }
111+ abs_rank += H * L ;
112112 }
113113
114114 if (0 == * nlrs ) {
115- free (lrs );
116- lrs = 0 ;
115+ free (lrs );
116+ lrs = 0 ;
117117 }
118118 return lrs ;
119119}
@@ -129,18 +129,18 @@ static int *find_lrs(char *map, int my_node, int *nlrs)
129129 * on failure. Array must be freed by the caller.
130130 */
131131int * mca_common_pmi2_parse_pmap (char * pmap , int my_rank ,
132- int * node , int * nlrs )
132+ int * node , int * nlrs )
133133{
134134 char * p ;
135135
136136 p = strstr (pmap , "(vector" );
137137 if (NULL == p ) {
138- return NULL ;
138+ return NULL ;
139139 }
140140
141141 * node = find_my_node (p , my_rank );
142142 if (0 > * node ) {
143- return NULL ;
143+ return NULL ;
144144 }
145145
146146 return find_lrs (p , * node , nlrs );
@@ -155,7 +155,7 @@ static void dump_lrs(int *lrs, int me, int node, int n)
155155
156156 printf ("Total %d ranks/node, node %d me %d\n" , n , node , me );
157157 for (i = 0 ; i < n ; i ++ ) {
158- printf ("%d " , lrs [i ]);
158+ printf ("%d " , lrs [i ]);
159159 }
160160 printf ("\n" );
161161 free (lrs );
@@ -175,14 +175,14 @@ int main(int argc, char **argv)
175175
176176
177177 if (argc == 3 ) {
178- me = atoi (argv [1 ]);
179- lrs = orte_grpcomm_pmi2_parse_pmap (argv [2 ], me , & node , & n );
180- if (NULL == lrs ) {
181- printf ("can not parse pmap\n" );
182- exit (1 );
183- }
184- dump_lrs (lrs , me , node , n );
185- exit (0 );
178+ me = atoi (argv [1 ]);
179+ lrs = orte_grpcomm_pmi2_parse_pmap (argv [2 ], me , & node , & n );
180+ if (NULL == lrs ) {
181+ printf ("can not parse pmap\n" );
182+ exit (1 );
183+ }
184+ dump_lrs (lrs , me , node , n );
185+ exit (0 );
186186 }
187187 /* built in cases */
188188
0 commit comments