[mpich2-commits] r5446 - in mpich2/trunk/src/pm/hydra: include pm/pmiserv ui/mpiexec ui/utils utils/args utils/launch

balaji at mcs.anl.gov balaji at mcs.anl.gov
Sun Oct 11 18:33:52 CDT 2009


Author: balaji
Date: 2009-10-11 18:33:52 -0500 (Sun, 11 Oct 2009)
New Revision: 5446

Modified:
   mpich2/trunk/src/pm/hydra/include/hydra.h
   mpich2/trunk/src/pm/hydra/include/hydra_base.h
   mpich2/trunk/src/pm/hydra/include/hydra_utils.h
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy.h
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c
   mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_serv_launch.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/ui/utils/uiu.c
   mpich2/trunk/src/pm/hydra/utils/args/args.c
   mpich2/trunk/src/pm/hydra/utils/launch/allocate.c
   mpich2/trunk/src/pm/hydra/utils/launch/launch.c
Log:
This is the second part of the cleanup to decouple the proxy/host
information from the executable information (see r5444 for the first
part). The last step is, of course, the actual decoupling, which this
commit does not do yet.

Also, this commit temporarily disables the per-node specific process
bindings. Global bindings will still work. I'll add that back in once
the rest of the code is cleaned up.


Modified: mpich2/trunk/src/pm/hydra/include/hydra.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra.h	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/include/hydra.h	2009-10-11 23:33:52 UTC (rev 5446)
@@ -22,7 +22,6 @@
 
     char *binding;
     char *bindlib;
-    char *user_bind_map;
 
     char *ckpointlib;
     int ckpoint_int;
@@ -35,7 +34,6 @@
     int enablex;
     int pm_env;
     char *wdir;
-    char *host_file;
 
     int ranks_per_proc;
     char *bootstrap_exec;

Modified: mpich2/trunk/src/pm/hydra/include/hydra_base.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-10-11 23:33:52 UTC (rev 5446)
@@ -168,7 +168,6 @@
 struct HYD_Proxy_segment {
     int start_pid;
     int proc_count;
-    char **mapping;
     struct HYD_Proxy_segment *next;
 };
 
@@ -198,8 +197,7 @@
     int  out;
     int  err;
 
-    char *user_bind_map;
-    int proxy_core_count;
+    int core_count;
 
     /* Segment list will contain one-pass of the hosts file */
     struct HYD_Proxy_segment *segment_list;

Modified: mpich2/trunk/src/pm/hydra/include/hydra_utils.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_utils.h	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/include/hydra_utils.h	2009-10-11 23:33:52 UTC (rev 5446)
@@ -125,6 +125,8 @@
 HYD_Status HYDU_find_in_path(const char *execname, char **path);
 char *HYDU_getcwd(void);
 HYD_Status HYDU_get_base_path(const char *execname, char *wdir, char **path);
+HYD_Status HYDU_parse_hostfile(char *hostfile,
+                               HYD_Status(*process_token) (char *token, int newline));
 
 
 /* bind */
@@ -169,11 +171,7 @@
 HYD_Status HYDU_alloc_proxy_segment(struct HYD_Proxy_segment **segment);
 HYD_Status HYDU_merge_proxy_segment(char *name, struct HYD_Proxy_segment *segment,
                                         struct HYD_Proxy **proxy_list);
-HYD_Status HYDU_merge_proxy_mapping(char *name, char *map, int num_procs,
-                                        struct HYD_Proxy **proxy_list);
 HYD_Status HYDU_alloc_proxy_exec(struct HYD_Proxy_exec **exec);
-HYD_Status HYDU_create_node_list_from_file(char *host_file,
-                                           struct HYD_Proxy **proxy_list);
 HYD_Status HYDU_create_process(char **client_arg, HYD_Env_t * env_list,
                                int *in, int *out, int *err, int *pid, int core);
 HYD_Status HYDU_fork_and_exit(int core);
@@ -182,7 +180,7 @@
                               struct HYD_Thread_context *ctxt);
 HYD_Status HYDU_join_thread(struct HYD_Thread_context ctxt);
 #endif /* HAVE_THREAD_SUPPORT */
-int HYDU_local_to_global_id(int local_id, int proxy_core_count,
+int HYDU_local_to_global_id(int local_id, int core_count,
                             struct HYD_Proxy_segment *segment_list, int global_core_count);
 
 

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy.h
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy.h	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy.h	2009-10-11 23:33:52 UTC (rev 5446)
@@ -29,7 +29,6 @@
 
     char *binding;
     char *bindlib;
-    char *user_bind_map;
 
     char *ckpointlib;
     char *ckpoint_prefix;
@@ -38,7 +37,7 @@
     struct HYD_Env_global global_env;
 
     int global_core_count;
-    int proxy_core_count;
+    int core_count;
     int exec_proc_count;
 
     int procs_are_launched;

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-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_proxy_utils.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -28,7 +28,6 @@
     HYD_PMCD_pmi_proxy_params.pmi_port_str = NULL;
     HYD_PMCD_pmi_proxy_params.binding = NULL;
     HYD_PMCD_pmi_proxy_params.bindlib = NULL;
-    HYD_PMCD_pmi_proxy_params.user_bind_map = NULL;
 
     HYD_PMCD_pmi_proxy_params.ckpointlib = NULL;
     HYD_PMCD_pmi_proxy_params.ckpoint_prefix = NULL;
@@ -39,7 +38,7 @@
     HYD_PMCD_pmi_proxy_params.global_env.inherited = NULL;
 
     HYD_PMCD_pmi_proxy_params.global_core_count = 0;
-    HYD_PMCD_pmi_proxy_params.proxy_core_count = 0;
+    HYD_PMCD_pmi_proxy_params.core_count = 0;
     HYD_PMCD_pmi_proxy_params.exec_proc_count = 0;
 
     HYD_PMCD_pmi_proxy_params.procs_are_launched = 0;
@@ -106,11 +105,6 @@
             else
                 HYD_PMCD_pmi_proxy_params.binding = HYDU_strdup(*argv);
 
-            argv++;
-            if (!strcmp(*argv, "HYDRA_NULL"))
-                HYD_PMCD_pmi_proxy_params.user_bind_map = NULL;
-            else
-                HYD_PMCD_pmi_proxy_params.user_bind_map = HYDU_strdup(*argv);
             continue;
         }
 
@@ -420,9 +414,6 @@
     if (HYD_PMCD_pmi_proxy_params.bindlib)
         HYDU_FREE(HYD_PMCD_pmi_proxy_params.bindlib);
 
-    if (HYD_PMCD_pmi_proxy_params.user_bind_map)
-        HYDU_FREE(HYD_PMCD_pmi_proxy_params.user_bind_map);
-
     if (HYD_PMCD_pmi_proxy_params.ckpointlib)
         HYDU_FREE(HYD_PMCD_pmi_proxy_params.ckpointlib);
 
@@ -442,10 +433,6 @@
         segment = HYD_PMCD_pmi_proxy_params.segment_list;
         while (segment) {
             tsegment = segment->next;
-            if (segment->mapping) {
-                HYDU_free_strlist(segment->mapping);
-                HYDU_FREE(segment->mapping);
-            }
             HYDU_FREE(segment);
             segment = tsegment;
         }
@@ -549,9 +536,9 @@
 
     HYDU_FUNC_ENTER();
 
-    HYD_PMCD_pmi_proxy_params.proxy_core_count = 0;
+    HYD_PMCD_pmi_proxy_params.core_count = 0;
     for (segment = HYD_PMCD_pmi_proxy_params.segment_list; segment; segment = segment->next)
-        HYD_PMCD_pmi_proxy_params.proxy_core_count += segment->proc_count;
+        HYD_PMCD_pmi_proxy_params.core_count += segment->proc_count;
 
     HYD_PMCD_pmi_proxy_params.exec_proc_count = 0;
     for (exec = HYD_PMCD_pmi_proxy_params.exec_list; exec; exec = exec->next)
@@ -560,7 +547,7 @@
     HYDU_MALLOC(pmi_ids, int *, HYD_PMCD_pmi_proxy_params.exec_proc_count * sizeof(int), status);
     for (i = 0; i < HYD_PMCD_pmi_proxy_params.exec_proc_count; i++) {
         pmi_ids[i] = HYDU_local_to_global_id(i,
-                                             HYD_PMCD_pmi_proxy_params.proxy_core_count,
+                                             HYD_PMCD_pmi_proxy_params.core_count,
                                              HYD_PMCD_pmi_proxy_params.segment_list,
                                              HYD_PMCD_pmi_proxy_params.global_core_count);
     }
@@ -671,7 +658,7 @@
 
         for (i = 0; i < exec->proc_count; i++) {
             pmi_id = HYDU_local_to_global_id(process_id,
-                                             HYD_PMCD_pmi_proxy_params.proxy_core_count,
+                                             HYD_PMCD_pmi_proxy_params.core_count,
                                              HYD_PMCD_pmi_proxy_params.segment_list,
                                              HYD_PMCD_pmi_proxy_params.global_core_count);
 

Modified: mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_serv_launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_serv_launch.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/pm/pmiserv/pmi_serv_launch.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -257,12 +257,6 @@
             proxy->exec_args[arg++] = HYDU_strdup(HYD_handle.binding);
         else
             proxy->exec_args[arg++] = HYDU_strdup("HYDRA_NULL");
-        if (HYD_handle.user_bind_map)
-            proxy->exec_args[arg++] = HYDU_strdup(HYD_handle.user_bind_map);
-        else if (proxy->user_bind_map)
-            proxy->exec_args[arg++] = HYDU_strdup(proxy->user_bind_map);
-        else
-            proxy->exec_args[arg++] = HYDU_strdup("HYDRA_NULL");
 
         proxy->exec_args[arg++] = HYDU_strdup("--bindlib");
         proxy->exec_args[arg++] = HYDU_strdup(HYD_handle.bindlib);

Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -128,10 +128,11 @@
     status = HYD_RMKI_init(HYD_handle.rmk);
     HYDU_ERR_POP(status, "unable to initialize RMK\n");
 
-    if (HYD_handle.host_file == NULL) {
-        /* User did not provide any host file. Query the RMK. We pass
-         * a zero node count, so the RMK will give us all the nodes it
-         * already has and won't try to allocate any more. */
+    if (HYD_handle.proxy_list == NULL) {
+        /* Proxy list is not created yet. The user might not have
+         * provided the host file. Query the RMK. We pass a zero node
+         * count, so the RMK will give us all the nodes it already has
+         * and won't try to allocate any more. */
         status = HYD_RMKI_query_node_list(&num_nodes, &HYD_handle.proxy_list);
         HYDU_ERR_POP(status, "unable to query the RMK for a node list\n");
 
@@ -140,16 +141,11 @@
 
         if (HYD_handle.proxy_list == NULL) {
             /* The RMK didn't give us anything back; use localhost */
-            HYD_handle.host_file = HYDU_strdup("HYDRA_USE_LOCALHOST");
+            status = HYD_UII_mpx_init_proxy_list("localhost", 1);
+            HYDU_ERR_POP(status, "unable to initialize proxy\n");
         }
     }
 
-    if (HYD_handle.host_file) {
-        /* Use the user specified host file */
-        status = HYDU_create_node_list_from_file(HYD_handle.host_file, &HYD_handle.proxy_list);
-        HYDU_ERR_POP(status, "unable to create host list\n");
-    }
-
     /* If the number of processes is not given, we allocate all the
      * available nodes to each executable */
     for (exec_info = HYD_handle.exec_info_list; exec_info; exec_info = exec_info->next) {
@@ -199,7 +195,7 @@
             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->proxy_core_count,
+                                                            proxy->core_count,
                                                             proxy->segment_list,
                                                             HYD_handle.global_core_count));
                     if (i < exec->proc_count - 1)
@@ -276,7 +272,7 @@
             proc_count += exec->proc_count;
         for (i = 0; i < proc_count; i++) {
             if (HYD_handle.print_all_exitcodes) {
-                HYDU_dump(stdout, "[%d]", HYDU_local_to_global_id(i, proxy->proxy_core_count,
+                HYDU_dump(stdout, "[%d]", HYDU_local_to_global_id(i, proxy->core_count,
                                                           proxy->segment_list,
                                                           HYD_handle.global_core_count));
                 HYDU_dump(stdout, "%d", WEXITSTATUS(proxy->exit_status[i]));

Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.h	2009-10-11 23:33:52 UTC (rev 5446)
@@ -9,6 +9,7 @@
 
 #include "hydra.h"
 
+HYD_Status HYD_UII_mpx_init_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-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -12,6 +12,8 @@
 #define IS_HELP(str) \
     ((!strcmp((str), "-h")) || (!strcmp((str), "-help")) || (!strcmp((str), "--help")))
 
+HYD_Handle HYD_handle;
+
 static void dump_env_notes(void)
 {
     printf("Additional generic notes:\n");
@@ -148,11 +150,101 @@
     goto fn_exit;
 }
 
+HYD_Status HYD_UII_mpx_init_proxy_list(char *hostname, int num_procs)
+{
+    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");
+
+    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");
+
+    HYD_handle.proxy_list->segment_list->start_pid = 0;
+    HYD_handle.proxy_list->segment_list->proc_count = num_procs;
+
+    HYD_handle.proxy_list->core_count += num_procs;
+
+  fn_exit:
+    HYDU_FUNC_EXIT();
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}
+
+
+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 */
+        hostname = strtok(token, ":");
+        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->core_count += num_procs;
+        }
+
+        pid += num_procs;
+    }
+    else { /* Not a new line */
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "token %s not supported at this time\n", token);
+    }
+
+  fn_exit:
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}
+
 static HYD_Status mfile_fn(char *arg, char ***argv)
 {
     HYD_Status status = HYD_SUCCESS;
 
-    HYDU_ERR_CHKANDJUMP(status, HYD_handle.host_file, HYD_INTERNAL_ERROR,
+    HYDU_ERR_CHKANDJUMP(status, HYD_handle.proxy_list, HYD_INTERNAL_ERROR,
                         "duplicate host file setting\n");
 
     if (**argv && IS_HELP(**argv)) {
@@ -161,7 +253,15 @@
         HYDU_ERR_SETANDJUMP(status, HYD_GRACEFUL_ABORT, "");
     }
 
-    HYD_handle.host_file = HYDU_strdup(**argv);
+    if (strcmp(**argv, "HYDRA_USE_LOCALHOST")) {
+        status = HYDU_parse_hostfile(**argv, process_mfile_token);
+        HYDU_ERR_POP(status, "error parsing hostfile\n");
+    }
+    else {
+        status = HYD_UII_mpx_init_proxy_list("localhost", 1);
+        HYDU_ERR_POP(status, "unable to initialize proxy\n");
+    }
+
     (*argv)++;
 
   fn_exit:
@@ -1094,8 +1194,10 @@
         HYD_handle.rmk = HYDU_strdup(HYDRA_DEFAULT_RMK);
 
     tmp = getenv("HYDRA_HOST_FILE");
-    if (HYD_handle.host_file == NULL && tmp)
-        HYD_handle.host_file = HYDU_strdup(tmp);
+    if (HYD_handle.proxy_list == NULL && tmp) {
+        status = HYDU_parse_hostfile(tmp, process_mfile_token);
+        HYDU_ERR_POP(status, "error parsing hostfile\n");
+    }
 
     tmp = getenv("HYDRA_PROXY_PORT");
     if (HYD_handle.proxy_port == -1 && tmp)

Modified: mpich2/trunk/src/pm/hydra/ui/utils/uiu.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/utils/uiu.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/ui/utils/uiu.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -19,7 +19,6 @@
     HYD_handle.rmk = NULL;
     HYD_handle.binding = NULL;
     HYD_handle.bindlib = NULL;
-    HYD_handle.user_bind_map = NULL;
 
     HYD_handle.ckpointlib = NULL;
     HYD_handle.ckpoint_int = -1;
@@ -32,7 +31,6 @@
     HYD_handle.enablex = -1;
     HYD_handle.pm_env = -1;
     HYD_handle.wdir = NULL;
-    HYD_handle.host_file = NULL;
 
     HYD_handle.ranks_per_proc = -1;
     HYD_handle.bootstrap_exec = NULL;
@@ -78,9 +76,6 @@
     if (HYD_handle.bindlib)
         HYDU_FREE(HYD_handle.bindlib);
 
-    if (HYD_handle.user_bind_map)
-        HYDU_FREE(HYD_handle.user_bind_map);
-
     if (HYD_handle.ckpointlib)
         HYDU_FREE(HYD_handle.ckpointlib);
 
@@ -90,9 +85,6 @@
     if (HYD_handle.wdir)
         HYDU_FREE(HYD_handle.wdir);
 
-    if (HYD_handle.host_file)
-        HYDU_FREE(HYD_handle.host_file);
-
     if (HYD_handle.bootstrap_exec)
         HYDU_FREE(HYD_handle.bootstrap_exec);
 
@@ -201,11 +193,11 @@
     HYDU_FUNC_ENTER();
 
     for (proxy = HYD_handle.proxy_list; proxy; proxy = proxy->next)
-        HYD_handle.global_core_count += proxy->proxy_core_count;
+        HYD_handle.global_core_count += proxy->core_count;
 
     proxy = HYD_handle.proxy_list;
     exec_info = HYD_handle.exec_info_list;
-    proxy_rem_procs = proxy->proxy_core_count;
+    proxy_rem_procs = proxy->core_count;
     exec_rem_procs = exec_info ? exec_info->process_count : 0;
     while (exec_info) {
         if (exec_rem_procs <= proxy_rem_procs) {
@@ -217,7 +209,7 @@
                 proxy = proxy->next;
                 if (proxy == NULL)
                     proxy = HYD_handle.proxy_list;
-                proxy_rem_procs = proxy->proxy_core_count;
+                proxy_rem_procs = proxy->core_count;
             }
 
             exec_info = exec_info->next;
@@ -232,7 +224,7 @@
             proxy = proxy->next;
             if (proxy == NULL)
                 proxy = HYD_handle.proxy_list;
-            proxy_rem_procs = proxy->proxy_core_count;
+            proxy_rem_procs = proxy->core_count;
         }
     }
 
@@ -268,7 +260,6 @@
     HYDU_dump(stdout, "  Debug level: %d\n", HYD_handle.debug);
     HYDU_dump(stdout, "  Enable X: %d\n", HYD_handle.enablex);
     HYDU_dump(stdout, "  Working dir: %s\n", HYD_handle.wdir);
-    HYDU_dump(stdout, "  Host file: %s\n", HYD_handle.host_file);
 
     HYDU_dump(stdout, "\n");
     HYDU_dump(stdout, "  Global environment:\n");
@@ -321,7 +312,7 @@
         HYDU_dump(stdout, "      Proxy ID: %2d\n", i++);
         HYDU_dump(stdout, "      -----------------\n");
         HYDU_dump(stdout, "        Proxy name: %s\n", proxy->hostname);
-        HYDU_dump(stdout, "        Process count: %d\n", proxy->proxy_core_count);
+        HYDU_dump(stdout, "        Process count: %d\n", proxy->core_count);
         HYDU_dump(stdout, "\n");
         HYDU_dump(stdout, "        Proxy segment list:\n");
         HYDU_dump(stdout, "        .......................\n");

Modified: mpich2/trunk/src/pm/hydra/utils/args/args.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/args/args.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/utils/args/args.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -152,3 +152,53 @@
 fn_fail:
     goto fn_exit;
 }
+
+
+HYD_Status HYDU_parse_hostfile(char *hostfile,
+                               HYD_Status(*process_token) (char *token, int newline))
+{
+    char line[HYD_TMP_STRLEN], **tokens;
+    FILE *fp;
+    int i;
+    HYD_Status status = HYD_SUCCESS;
+
+    HYDU_FUNC_ENTER();
+
+    if ((fp = fopen(hostfile, "r")) == NULL)
+        HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
+                             "unable to open host file: %s\n", hostfile);
+
+    while (fgets(line, HYD_TMP_STRLEN, fp)) {
+        char *linep = NULL;
+
+        linep = line;
+
+        strtok(linep, "#");
+        while (isspace(*linep))
+            linep++;
+
+        /* Ignore blank lines & comments */
+        if ((*linep == '#') || (*linep == '\0'))
+            continue;
+
+        tokens = HYDU_str_to_strlist(linep);
+        if (!tokens)
+            HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
+                                "Unable to convert host file entry to strlist\n");
+
+        for (i = 0; tokens[i]; i++) {
+            status = process_token(tokens[i], !i);
+            HYDU_ERR_POP(status, "unable to process token\n");
+        }
+    }
+
+    fclose(fp);
+
+
+  fn_exit:
+    HYDU_FUNC_EXIT();
+    return status;
+
+  fn_fail:
+    goto fn_exit;
+}

Modified: mpich2/trunk/src/pm/hydra/utils/launch/allocate.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/launch/allocate.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/utils/launch/allocate.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -25,9 +25,8 @@
     (*proxy)->active = 0;
     (*proxy)->exec_args = NULL;
 
-    (*proxy)->user_bind_map = NULL;
     (*proxy)->segment_list = NULL;
-    (*proxy)->proxy_core_count = 0;
+    (*proxy)->core_count = 0;
 
     (*proxy)->exit_status = NULL;
     (*proxy)->control_fd = -1;
@@ -110,16 +109,9 @@
             HYDU_FREE(proxy->exec_args);
         }
 
-        if (proxy->user_bind_map)
-            HYDU_FREE(proxy->user_bind_map);
-
         segment = proxy->segment_list;
         while (segment) {
             tsegment = segment->next;
-            if (segment->mapping) {
-                HYDU_free_strlist(segment->mapping);
-                HYDU_FREE(segment->mapping);
-            }
             HYDU_FREE(segment);
             segment = tsegment;
         }
@@ -157,7 +149,6 @@
                 sizeof(struct HYD_Proxy_segment), status);
     (*segment)->start_pid = -1;
     (*segment)->proc_count = 0;
-    (*segment)->mapping = NULL;
     (*segment)->next = NULL;
 
   fn_exit:
@@ -183,7 +174,7 @@
         HYDU_ERR_POP(status, "Unable to alloc proxy\n");
         (*proxy_list)->segment_list = segment;
         (*proxy_list)->hostname = HYDU_strdup(hostname);
-        (*proxy_list)->proxy_core_count += segment->proc_count;
+        (*proxy_list)->core_count += segment->proc_count;
     }
     else {
         proxy = *proxy_list;
@@ -197,7 +188,7 @@
                         s = s->next;
                     s->next = segment;
                 }
-                proxy->proxy_core_count += segment->proc_count;
+                proxy->core_count += segment->proc_count;
                 break;
             }
             else if (proxy->next == NULL) {
@@ -205,7 +196,7 @@
                 HYDU_ERR_POP(status, "Unable to alloc proxy\n");
                 proxy->next->segment_list = segment;
                 proxy->next->hostname = HYDU_strdup(hostname);
-                proxy->next->proxy_core_count += segment->proc_count;
+                proxy->next->core_count += segment->proc_count;
                 break;
             }
             else {
@@ -267,78 +258,6 @@
 }
 
 
-HYD_Status HYDU_merge_proxy_mapping(char *hostname, char *map, int num_procs,
-                                        struct HYD_Proxy **proxy_list)
-{
-    struct HYD_Proxy *proxy;
-    char *tmp[HYD_NUM_TMP_STRINGS], *x;
-    int i, count;
-    HYD_Status status = HYD_SUCCESS;
-
-    HYDU_FUNC_ENTER();
-
-    if (*proxy_list == NULL) {
-        HYDU_alloc_proxy(proxy_list);
-        (*proxy_list)->hostname = HYDU_strdup(hostname);
-
-        x = HYDU_strdup(map);
-        count = num_procs - count_elements(x, ",");
-        HYDU_FREE(x);
-
-        (*proxy_list)->user_bind_map = pad_string(map, ",-1", count);
-    }
-    else {
-        proxy = *proxy_list;
-        while (proxy) {
-            if (strcmp(proxy->hostname, hostname) == 0) {
-                /* Found a proxy with the same hostname; append */
-                if (proxy->user_bind_map == NULL) {
-                    x = HYDU_strdup(map);
-                    count = num_procs - count_elements(x, ",");
-                    HYDU_FREE(x);
-
-                    proxy->user_bind_map = pad_string(map, ",-1", count);
-                }
-                else {
-                    x = HYDU_strdup(map);
-                    count = num_procs - count_elements(x, ",");
-                    HYDU_FREE(x);
-
-                    i = 0;
-                    tmp[i++] = HYDU_strdup(proxy->user_bind_map);
-                    tmp[i++] = HYDU_strdup(",");
-                    tmp[i++] = pad_string(map, ",-1", count);
-                    tmp[i++] = NULL;
-
-                    HYDU_FREE(proxy->user_bind_map);
-                    status = HYDU_str_alloc_and_join(tmp, &proxy->user_bind_map);
-                    HYDU_ERR_POP(status, "unable to join strings\n");
-
-                    HYDU_free_strlist(tmp);
-                }
-                break;
-            }
-            else if (proxy->next == NULL) {
-                HYDU_alloc_proxy(&proxy->next);
-                proxy->next->hostname = HYDU_strdup(hostname);
-                proxy->next->user_bind_map = HYDU_strdup(map);
-                break;
-            }
-            else {
-                proxy = proxy->next;
-            }
-        }
-    }
-
-  fn_exit:
-    HYDU_FUNC_EXIT();
-    return status;
-
-  fn_fail:
-    goto fn_exit;
-}
-
-
 HYD_Status HYDU_alloc_proxy_exec(struct HYD_Proxy_exec **exec)
 {
     HYD_Status status = HYD_SUCCESS;
@@ -359,104 +278,3 @@
   fn_fail:
     goto fn_exit;
 }
-
-
-HYD_Status HYDU_create_node_list_from_file(char *host_file,
-                                           struct HYD_Proxy **proxy_list)
-{
-    FILE *fp = NULL;
-    char line[HYD_TMP_STRLEN], *hostname, *procs, **arg_list;
-    char *str[2] = { NULL };
-    int num_procs, total_count, arg, i;
-    struct HYD_Proxy_segment *segment;
-    HYD_Status status = HYD_SUCCESS;
-
-    HYDU_FUNC_ENTER();
-
-    if (!strcmp(host_file, "HYDRA_USE_LOCALHOST")) {
-        HYDU_alloc_proxy(&(*proxy_list));
-        (*proxy_list)->hostname = HYDU_strdup("localhost");
-        (*proxy_list)->proxy_core_count = 1;
-
-        HYDU_alloc_proxy_segment(&((*proxy_list)->segment_list));
-        (*proxy_list)->segment_list->start_pid = 0;
-        (*proxy_list)->segment_list->proc_count = 1;
-    }
-    else {
-        fp = fopen(host_file, "r");
-        if (!fp)
-            HYDU_ERR_SETANDJUMP1(status, HYD_INTERNAL_ERROR,
-                                 "unable to open host file: %s\n", host_file);
-
-        total_count = 0;
-        while (fgets(line, HYD_TMP_STRLEN, fp)) {
-            char *linep = NULL;
-
-            linep = line;
-
-            strtok(linep, "#");
-
-            while (isspace(*linep))
-                linep++;
-
-            /* Ignore blank lines & comments */
-            if ((*linep == '#') || (*linep == '\0'))
-                continue;
-
-            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 = strtok(arg_list[0], ":");
-            procs = strtok(NULL, ":");
-            num_procs = procs ? atoi(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_alloc_proxy_segment(&segment);
-            HYDU_ERR_POP(status, "Unable to allocate proxy segment\n");
-            segment->start_pid = total_count;
-            segment->proc_count = num_procs;
-            status = HYDU_merge_proxy_segment(hostname, segment, proxy_list);
-            HYDU_ERR_POP(status, "merge proxy segment failed\n");
-
-            total_count += num_procs;
-
-            /* Check for the remaining parameters */
-            arg = 1;
-            str[0] = str[1] = NULL;
-            while (arg_list[arg]) {
-                status = HYDU_strsplit(arg_list[arg], &str[0], &str[1], '=');
-                HYDU_ERR_POP(status, "unable to split string\n");
-
-                if (!strcmp(str[0], "map")) {
-                    status = HYDU_merge_proxy_mapping(hostname, str[1], num_procs,
-                                                          proxy_list);
-                    HYDU_ERR_POP(status, "merge proxy mapping failed\n");
-                }
-                if (str[0])
-                    HYDU_FREE(str[0]);
-                if (str[1])
-                    HYDU_FREE(str[1]);
-                str[0] = str[1] = NULL;
-                arg++;
-            }
-            HYDU_free_strlist(arg_list);
-            HYDU_FREE(arg_list);
-        }
-
-        fclose(fp);
-    }
-
-  fn_exit:
-    HYDU_FUNC_EXIT();
-    return status;
-
-  fn_fail:
-    for (i = 0; i < 2; i++)
-        if (str[i])
-            HYDU_FREE(str[i]);
-    goto fn_exit;
-}

Modified: mpich2/trunk/src/pm/hydra/utils/launch/launch.c
===================================================================
--- mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2009-10-11 20:32:14 UTC (rev 5445)
+++ mpich2/trunk/src/pm/hydra/utils/launch/launch.c	2009-10-11 23:33:52 UTC (rev 5446)
@@ -173,14 +173,14 @@
 }
 #endif /* HAVE_THREAD_SUPPORT */
 
-int HYDU_local_to_global_id(int local_id, int proxy_core_count,
+int HYDU_local_to_global_id(int local_id, int core_count,
                             struct HYD_Proxy_segment *segment_list, int global_core_count)
 {
     int global_id, rem;
     struct HYD_Proxy_segment *segment;
 
-    global_id = ((local_id / proxy_core_count) * global_core_count);
-    rem = (local_id % proxy_core_count);
+    global_id = ((local_id / core_count) * global_core_count);
+    rem = (local_id % core_count);
 
     for (segment = segment_list; segment; segment = segment->next) {
         if (rem >= segment->proc_count)



More information about the mpich2-commits mailing list