[mpich2-commits] r5485 - in mpich2/trunk/src/pm/hydra: include rmk/pbs ui/mpiexec utils/others
balaji at mcs.anl.gov
balaji at mcs.anl.gov
Mon Oct 19 14:24:18 CDT 2009
Author: balaji
Date: 2009-10-19 14:24:18 -0500 (Mon, 19 Oct 2009)
New Revision: 5485
Modified:
mpich2/trunk/src/pm/hydra/include/hydra_utils.h
mpich2/trunk/src/pm/hydra/rmk/pbs/rmk_pbs_query_node_list.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/others/others.c
Log:
The hostfile parsing code was not common between the UI and the RMK
which caused the RMK to be left behind in the previous cleanup.
Modified: mpich2/trunk/src/pm/hydra/include/hydra_utils.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_utils.h 2009-10-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/include/hydra_utils.h 2009-10-19 19:24:18 UTC (rev 5485)
@@ -178,6 +178,8 @@
struct HYD_proxy **proxy_list);
int HYDU_local_to_global_id(int local_id, int start_pid, int core_count,
int global_core_count);
+HYD_status HYDU_add_to_proxy_list(char *hostname, int num_procs,
+ struct HYD_proxy **proxy_list);
/* signals */
#ifdef NEEDS_POSIX_FOR_SIGACTION
Modified: mpich2/trunk/src/pm/hydra/rmk/pbs/rmk_pbs_query_node_list.c
===================================================================
--- mpich2/trunk/src/pm/hydra/rmk/pbs/rmk_pbs_query_node_list.c 2009-10-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/rmk/pbs/rmk_pbs_query_node_list.c 2009-10-19 19:24:18 UTC (rev 5485)
@@ -8,62 +8,53 @@
#include "rmki.h"
#include "rmk_pbs.h"
-HYD_status HYD_rmkd_pbs_query_node_list(int *num_nodes, struct HYD_proxy **proxy_list)
+static int total_num_procs;
+
+static HYD_status process_mfile_token(char *token, int newline)
{
- char *host_file, *hostname, line[HYD_TMP_STRLEN], **arg_list;
int num_procs;
- FILE *fp;
+ char *hostname, *procs;
HYD_status status = HYD_SUCCESS;
- HYDU_FUNC_ENTER();
+ if (newline) { /* The first entry gives the hostname and processes */
+ hostname = strtok(token, ":");
+ procs = strtok(NULL, ":");
+ num_procs = procs ? atoi(procs) : 1;
- host_file = getenv("PBS_NODEFILE");
+ status = HYDU_add_to_proxy_list(hostname, num_procs, &HYD_handle.proxy_list);
+ HYDU_ERR_POP(status, "unable to initialize proxy\n");
- if (host_file == NULL || host_file == NULL) {
- *proxy_list = NULL;
+ total_num_procs += num_procs;
}
- else {
- fp = fopen(host_file, "r");
- if (!fp)
- HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
- "unable to open host file: %s\n", host_file);
+ else { /* Not a new line */
+ HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+ "token %s not supported at this time\n", token);
+ }
- *num_nodes = 0;
- while (fgets(line, HYD_TMP_STRLEN, fp)) {
- char *linep = NULL;
+fn_exit:
+ return status;
- linep = line;
- strtok(linep, "#");
+fn_fail:
+ goto fn_exit;
+}
- while (isspace(*linep))
- linep++;
+HYD_status HYD_rmkd_pbs_query_node_list(int *num_nodes, struct HYD_proxy **proxy_list)
+{
+ char *hostfile;
+ HYD_status status = HYD_SUCCESS;
- /* Ignore blank lines & comments */
- if ((*linep == '#') || (*linep == '\0'))
- continue;
+ HYDU_FUNC_ENTER();
- /* break up the arguments in the line */
- arg_list = HYDU_str_to_strlist(linep);
- if (!arg_list)
- HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
- "Unable to convert host file entry to strlist\n");
-
- hostname = arg_list[0];
- num_procs = 1;
-
- /* Try to find an existing proxy with this name and
- * add this segment in. If there is no existing proxy
- * with this name, we create a new one. */
- status = HYDU_merge_proxy_segment(hostname, *num_nodes, num_procs, proxy_list);
- HYDU_ERR_POP(status, "merge proxy segment failed\n");
-
- *num_nodes += num_procs;
-
- HYDU_FREE(arg_list);
- }
-
- fclose(fp);
+ hostfile = getenv("PBS_NODEFILE");
+ if (hostfile == NULL) {
+ *proxy_list = NULL;
}
+ else {
+ total_num_procs = 0;
+ status = HYDU_parse_hostfile(hostfile, process_mfile_token);
+ HYDU_ERR_POP(status, "error parsing hostfile\n");
+ *num_nodes = total_num_procs;
+ }
fn_exit:
HYDU_FUNC_EXIT();
Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c 2009-10-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c 2009-10-19 19:24:18 UTC (rev 5485)
@@ -141,9 +141,14 @@
if (HYD_handle.proxy_list == NULL) {
/* The RMK didn't give us anything back; use localhost */
- status = HYD_uii_mpx_add_to_proxy_list((char *) "localhost", 1);
+ status = HYDU_add_to_proxy_list((char *) "localhost", 1, &HYD_handle.proxy_list);
HYDU_ERR_POP(status, "unable to initialize proxy\n");
+ HYD_handle.global_core_count += 1;
}
+ else {
+ /* The RMK returned a node list */
+ HYD_handle.global_core_count += num_nodes;
+ }
}
/* If the number of processes is not given, we allocate all the
@@ -154,6 +159,10 @@
exec_info->process_count = 1;
else
exec_info->process_count = num_nodes;
+
+ /* If we didn't get anything from the user, take whatever
+ * the RMK gave */
+ HYD_handle.global_process_count += exec_info->process_count;
}
}
@@ -190,23 +199,22 @@
if (HYD_handle.print_rank_map) {
FORALL_ACTIVE_PROXIES(proxy, HYD_handle.proxy_list) {
- HYDU_dump(stdout, "[%s] ", proxy->hostname);
+ HYDU_dump_noprefix(stdout, "(%s:", proxy->hostname);
process_id = 0;
for (exec = proxy->exec_list; exec; exec = exec->next) {
for (i = 0; i < exec->proc_count; i++) {
- HYDU_dump(stdout, "%d",
- HYDU_local_to_global_id(process_id++,
- proxy->start_pid,
- proxy->proxy_core_count,
- HYD_handle.global_core_count));
- if (i < exec->proc_count - 1)
- HYDU_dump(stdout, ",");
+ HYDU_dump_noprefix(stdout, "%d",
+ HYDU_local_to_global_id(process_id++,
+ proxy->start_pid,
+ proxy->proxy_core_count,
+ HYD_handle.global_core_count));
+ if (i < exec->proc_count - 1 || exec->next)
+ HYDU_dump_noprefix(stdout, ",");
}
}
- HYDU_dump(stdout, "\n");
+ HYDU_dump_noprefix(stdout, ")\n");
}
- HYDU_dump(stdout, "\n");
}
FORALL_ACTIVE_PROXIES(proxy, HYD_handle.proxy_list)
Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h 2009-10-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h 2009-10-19 19:24:18 UTC (rev 5485)
@@ -9,7 +9,6 @@
#include "hydra.h"
-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-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c 2009-10-19 19:24:18 UTC (rev 5485)
@@ -150,53 +150,6 @@
goto fn_exit;
}
-HYD_status HYD_uii_mpx_add_to_proxy_list(char *hostname, int num_procs)
-{
- static int pid = 0;
- struct HYD_proxy *proxy;
- HYD_status status = HYD_SUCCESS;
-
- HYDU_FUNC_ENTER();
-
- 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->start_pid = 0;
- 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; 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);
-
- proxy->start_pid = pid;
- }
-
- proxy->proxy_core_count += num_procs;
- HYD_handle.global_core_count += num_procs;
- }
- pid += num_procs;
-
- fn_exit:
- HYDU_FUNC_EXIT();
- return status;
-
- fn_fail:
- goto fn_exit;
-}
-
-
static HYD_status process_mfile_token(char *token, int newline)
{
int num_procs;
@@ -208,8 +161,9 @@
procs = strtok(NULL, ":");
num_procs = procs ? atoi(procs) : 1;
- status = HYD_uii_mpx_add_to_proxy_list(hostname, num_procs);
+ status = HYDU_add_to_proxy_list(hostname, num_procs, &HYD_handle.proxy_list);
HYDU_ERR_POP(status, "unable to initialize proxy\n");
+ HYD_handle.global_core_count += num_procs;
}
else { /* Not a new line */
HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
@@ -241,8 +195,9 @@
HYDU_ERR_POP(status, "error parsing hostfile\n");
}
else {
- status = HYD_uii_mpx_add_to_proxy_list((char *) "localhost", 1);
+ status = HYDU_add_to_proxy_list((char *) "localhost", 1, &HYD_handle.proxy_list);
HYDU_ERR_POP(status, "unable to add proxy\n");
+ HYD_handle.global_core_count += 1;
}
(*argv)++;
Modified: mpich2/trunk/src/pm/hydra/utils/others/others.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/others/others.c 2009-10-19 08:05:04 UTC (rev 5484)
+++ mpich2/trunk/src/pm/hydra/utils/others/others.c 2009-10-19 19:24:18 UTC (rev 5485)
@@ -46,3 +46,48 @@
{
return ((local_id / core_count) * global_core_count) + (local_id % core_count) + start_pid;
}
+
+HYD_status HYDU_add_to_proxy_list(char *hostname, int num_procs,
+ struct HYD_proxy **proxy_list)
+{
+ static int pid = 0;
+ struct HYD_proxy *proxy;
+ HYD_status status = HYD_SUCCESS;
+
+ HYDU_FUNC_ENTER();
+
+ if (*proxy_list == NULL) {
+ status = HYDU_alloc_proxy(proxy_list);
+ HYDU_ERR_POP(status, "unable to allocate proxy\n");
+
+ (*proxy_list)->hostname = HYDU_strdup(hostname);
+
+ (*proxy_list)->start_pid = 0;
+ (*proxy_list)->proxy_core_count = num_procs;
+ }
+ else {
+ for (proxy = *proxy_list; proxy->next; 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);
+
+ proxy->start_pid = pid;
+ }
+
+ proxy->proxy_core_count += num_procs;
+ }
+ pid += num_procs;
+
+ fn_exit:
+ HYDU_FUNC_EXIT();
+ return status;
+
+ fn_fail:
+ goto fn_exit;
+}
More information about the mpich2-commits
mailing list