[mpich2-commits] r5455 - in mpich2/trunk/src/pm/hydra: pm/pmiserv ui/mpiexec utils/string
balaji at mcs.anl.gov
balaji at mcs.anl.gov
Wed Oct 14 06:35:40 CDT 2009
Author: balaji
Date: 2009-10-14 06:35:39 -0500 (Wed, 14 Oct 2009)
New Revision: 5455
Modified:
mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_handle.c
mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c
mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h
mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c
mpich2/trunk/src/pm/hydra/utils/string/string.c
Log:
Fix a bug in multi-node launches that got introduced in r5446. Cleaned
up some redundant code along the way as well.
Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_handle.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_handle.c 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_handle.c 2009-10-14 11:35:39 UTC (rev 5455)
@@ -314,9 +314,9 @@
tmp[i++] = HYDU_int_to_str(block->num_blocks);
tmp[i++] = HYDU_strdup(",");
tmp[i++] = HYDU_int_to_str(block->block_size);
+ tmp[i++] = HYDU_strdup(")");
if (block->next)
tmp[i++] = HYDU_strdup(",");
- tmp[i++] = HYDU_strdup(")");
HYDU_STRLIST_CONSOLIDATE(tmp, i, status);
}
tmp[i++] = HYDU_strdup(")");
Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c 2009-10-14 11:35:39 UTC (rev 5455)
@@ -545,12 +545,13 @@
for (exec = HYD_PMCD_pmi_proxy_params.exec_list; exec; exec = exec->next)
HYD_PMCD_pmi_proxy_params.local.process_count += exec->proc_count;
- HYDU_MALLOC(pmi_ids, int *, HYD_PMCD_pmi_proxy_params.local.process_count * sizeof(int), status);
+ HYDU_MALLOC(pmi_ids, int *, HYD_PMCD_pmi_proxy_params.local.process_count * sizeof(int),
+ status);
for (i = 0; i < HYD_PMCD_pmi_proxy_params.local.process_count; i++) {
- pmi_ids[i] = HYDU_local_to_global_id(i,
- HYD_PMCD_pmi_proxy_params.local.core_count,
- HYD_PMCD_pmi_proxy_params.segment_list,
- HYD_PMCD_pmi_proxy_params.system_global.global_core_count);
+ pmi_ids[i] =
+ HYDU_local_to_global_id(i, HYD_PMCD_pmi_proxy_params.local.core_count,
+ HYD_PMCD_pmi_proxy_params.segment_list,
+ HYD_PMCD_pmi_proxy_params.system_global.global_core_count);
}
HYDU_MALLOC(HYD_PMCD_pmi_proxy_params.downstream.out, int *,
Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c 2009-10-14 11:35:39 UTC (rev 5455)
@@ -141,7 +141,7 @@
if (HYD_handle.proxy_list == NULL) {
/* The RMK didn't give us anything back; use localhost */
- status = HYD_UII_mpx_init_proxy_list((char *) "localhost", 1);
+ status = HYD_UII_mpx_add_to_proxy_list((char *) "localhost", 1);
HYDU_ERR_POP(status, "unable to initialize proxy\n");
}
}
Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h 2009-10-14 11:35:39 UTC (rev 5455)
@@ -9,7 +9,7 @@
#include "hydra.h"
-HYD_Status HYD_UII_mpx_init_proxy_list(char *hostname, int num_procs);
+HYD_Status HYD_UII_mpx_add_to_proxy_list(char *hostname, int num_procs);
HYD_Status HYD_UII_mpx_get_parameters(char **t_argv);
HYD_Status HYD_UII_mpx_stdout_cb(int fd, HYD_Event_t events, void *userp);
HYD_Status HYD_UII_mpx_stderr_cb(int fd, HYD_Event_t events, void *userp);
Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c 2009-10-14 11:35:39 UTC (rev 5455)
@@ -150,26 +150,70 @@
goto fn_exit;
}
-HYD_Status HYD_UII_mpx_init_proxy_list(char *hostname, int num_procs)
+HYD_Status HYD_UII_mpx_add_to_proxy_list(char *hostname, int num_procs)
{
+ static int pid = 0;
+ struct HYD_Proxy *proxy;
+ struct HYD_Proxy_segment *segment;
HYD_Status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
- status = HYDU_alloc_proxy(&HYD_handle.proxy_list);
- HYDU_ERR_POP(status, "unable to allocate proxy\n");
+ if (HYD_handle.proxy_list == NULL) {
+ status = HYDU_alloc_proxy(&HYD_handle.proxy_list);
+ HYDU_ERR_POP(status, "unable to allocate proxy\n");
- HYD_handle.proxy_list->hostname = HYDU_strdup(hostname);
+ HYD_handle.proxy_list->hostname = HYDU_strdup(hostname);
- status = HYDU_alloc_proxy_segment(&HYD_handle.proxy_list->segment_list);
- HYDU_ERR_POP(status, "unable to allocate proxy segment\n");
+ status = HYDU_alloc_proxy_segment(&HYD_handle.proxy_list->segment_list);
+ HYDU_ERR_POP(status, "unable to allocate proxy segment\n");
- HYD_handle.proxy_list->segment_list->start_pid = 0;
- HYD_handle.proxy_list->segment_list->proc_count = num_procs;
+ HYD_handle.proxy_list->segment_list->start_pid = 0;
+ HYD_handle.proxy_list->segment_list->proc_count = num_procs;
- HYD_handle.proxy_list->proxy_core_count += num_procs;
- HYD_handle.global_core_count += num_procs;
+ HYD_handle.proxy_list->proxy_core_count += num_procs;
+ HYD_handle.global_core_count += num_procs;
+ }
+ else {
+ for (proxy = HYD_handle.proxy_list;
+ proxy->next && strcmp(proxy->hostname, hostname); proxy = proxy->next);
+ if (strcmp(proxy->hostname, hostname)) {
+ /* If the hostname does not match, create a new proxy */
+ status = HYDU_alloc_proxy(&proxy->next);
+ HYDU_ERR_POP(status, "unable to allocate proxy\n");
+
+ proxy = proxy->next;
+
+ proxy->hostname = HYDU_strdup(hostname);
+
+ status = HYDU_alloc_proxy_segment(&proxy->segment_list);
+ HYDU_ERR_POP(status, "unable to allocate proxy segment\n");
+
+ proxy->segment_list->start_pid = pid;
+ proxy->segment_list->proc_count = num_procs;
+ }
+ else { /* hostname matches */
+ for (segment = proxy->segment_list; segment->next; segment = segment->next);
+
+ /* If this segment is a continuation, just increment the
+ * size of the previous segment */
+ if (segment->start_pid + segment->proc_count == pid)
+ segment->proc_count += num_procs;
+ else {
+ status = HYDU_alloc_proxy_segment(&segment->next);
+ HYDU_ERR_POP(status, "unable to allocate proxy segment\n");
+
+ segment->next->start_pid = pid;
+ segment->next->proc_count = num_procs;
+ }
+ }
+
+ proxy->proxy_core_count += num_procs;
+ HYD_handle.global_core_count += num_procs;
+ }
+ pid += num_procs;
+
fn_exit:
HYDU_FUNC_EXIT();
return status;
@@ -181,11 +225,8 @@
static HYD_Status process_mfile_token(char *token, int newline)
{
- static int pid = 0;
int num_procs;
char *hostname, *procs;
- struct HYD_Proxy *proxy;
- struct HYD_Proxy_segment *proxy_segment;
HYD_Status status = HYD_SUCCESS;
if (newline) { /* The first entry gives the hostname and processes */
@@ -193,42 +234,8 @@
procs = strtok(NULL, ":");
num_procs = procs ? atoi(procs) : 1;
- if (HYD_handle.proxy_list == NULL) {
- status = HYD_UII_mpx_init_proxy_list(hostname, num_procs);
- HYDU_ERR_POP(status, "unable to initialize proxy\n");
- }
- else {
- for (proxy = HYD_handle.proxy_list;
- proxy->next && strcmp(proxy->hostname, hostname); proxy = proxy->next);
-
- if (strcmp(proxy->hostname, hostname)) {
- /* If the hostname does not match, create a new proxy */
- status = HYDU_alloc_proxy(&proxy->next);
- HYDU_ERR_POP(status, "unable to allocate proxy\n");
-
- proxy = proxy->next;
- }
-
- for (proxy_segment = proxy->segment_list; proxy_segment->next;
- proxy_segment = proxy_segment->next);
-
- /* If this segment is a continuation, just increment the
- * size of the previous segment */
- if (proxy_segment->start_pid + proxy_segment->proc_count == pid)
- proxy_segment->proc_count += num_procs;
- else {
- status = HYDU_alloc_proxy_segment(&proxy_segment->next);
- HYDU_ERR_POP(status, "unable to allocate proxy segment\n");
-
- proxy_segment->next->start_pid = pid;
- proxy_segment->next->proc_count = num_procs;
- }
-
- HYD_handle.proxy_list->proxy_core_count += num_procs;
- HYD_handle.global_core_count += num_procs;
- }
-
- pid += num_procs;
+ status = HYD_UII_mpx_add_to_proxy_list(hostname, num_procs);
+ HYDU_ERR_POP(status, "unable to initialize proxy\n");
}
else { /* Not a new line */
HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
@@ -260,8 +267,8 @@
HYDU_ERR_POP(status, "error parsing hostfile\n");
}
else {
- status = HYD_UII_mpx_init_proxy_list((char *) "localhost", 1);
- HYDU_ERR_POP(status, "unable to initialize proxy\n");
+ status = HYD_UII_mpx_add_to_proxy_list((char *) "localhost", 1);
+ HYDU_ERR_POP(status, "unable to add proxy\n");
}
(*argv)++;
Modified: mpich2/trunk/src/pm/hydra/utils/string/string.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/string/string.c 2009-10-14 11:35:35 UTC (rev 5454)
+++ mpich2/trunk/src/pm/hydra/utils/string/string.c 2009-10-14 11:35:39 UTC (rev 5455)
@@ -192,9 +192,9 @@
char **HYDU_str_to_strlist(char *str)
{
- int argc = 0;
+ int argc = 0, i;
char **strlist = NULL;
- char *p, *r;
+ char *p;
HYD_Status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
@@ -208,19 +208,23 @@
while (*p) {
while (isspace(*p))
p++;
+
if (argc >= HYD_NUM_TMP_STRINGS)
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "too many arguments in line\n");
- /* Make a copy and NULL terminate it */
- strlist[argc] = HYDU_strdup(p);
- r = strlist[argc];
- while (*r && !isspace(*r))
- r++;
- *r = 0;
+ HYDU_MALLOC(strlist[argc], char *, HYD_TMP_STRLEN, status);
- while (*p && !isspace(*p))
+ /* Copy till you hit a space */
+ i = 0;
+ while (*p && !isspace(*p)) {
+ strlist[argc][i] = *p;
+ i++;
p++;
- argc++;
+ }
+ if (i) {
+ strlist[argc][i] = 0;
+ argc++;
+ }
}
strlist[argc] = NULL;
More information about the mpich2-commits
mailing list