[mpich2-commits] r5447 - in mpich2/trunk/src/pm/hydra: include ui/mpiexec ui/utils

balaji at mcs.anl.gov balaji at mcs.anl.gov
Mon Oct 12 13:43:14 CDT 2009


Author: balaji
Date: 2009-10-12 13:43:14 -0500 (Mon, 12 Oct 2009)
New Revision: 5447

Modified:
   mpich2/trunk/src/pm/hydra/include/hydra.h
   mpich2/trunk/src/pm/hydra/include/hydra_base.h
   mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
   mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c
   mpich2/trunk/src/pm/hydra/ui/utils/uiu.c
Log:
Check the number of processes launched to see if a proxy is active,
instead of relying on whether it has an executable to launch or not.


Modified: mpich2/trunk/src/pm/hydra/include/hydra.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra.h	2009-10-11 23:33:52 UTC (rev 5446)
+++ mpich2/trunk/src/pm/hydra/include/hydra.h	2009-10-12 18:43:14 UTC (rev 5447)
@@ -50,10 +50,11 @@
     HYD_Time start;
     HYD_Time timeout;
 
+    struct HYD_Proxy *proxy_list;
     int global_core_count;
 
     struct HYD_Exec_info *exec_info_list;
-    struct HYD_Proxy *proxy_list;
+    int global_process_count;
 
     /* Random parameters used for internal code */
     int func_depth;

Modified: mpich2/trunk/src/pm/hydra/include/hydra_base.h
===================================================================
--- mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-10-11 23:33:52 UTC (rev 5446)
+++ mpich2/trunk/src/pm/hydra/include/hydra_base.h	2009-10-12 18:43:14 UTC (rev 5447)
@@ -157,9 +157,11 @@
 #endif
 #endif
 
+#define PROXY_IS_ACTIVE(proxy, total_procs) \
+    ((proxy)->segment_list->start_pid <= (total_procs))
+
 #define FORALL_ACTIVE_PROXIES(proxy, proxy_list)    \
-    for ((proxy) = (proxy_list); (proxy) && (proxy)->active; \
-         (proxy) = (proxy)->next)
+    for ((proxy) = (proxy_list); (proxy) && (proxy)->active; (proxy) = (proxy)->next)
 
 #define FORALL_PROXIES(proxy, proxy_list)    \
     for ((proxy) = (proxy_list); (proxy); (proxy) = (proxy)->next)

Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c	2009-10-11 23:33:52 UTC (rev 5446)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/mpiexec.c	2009-10-12 18:43:14 UTC (rev 5447)
@@ -157,19 +157,14 @@
         }
     }
 
-    status = HYD_UIU_merge_exec_info_to_proxy();
-    HYDU_ERR_POP(status, "unable to merge exec info\n");
-
-    if (HYD_handle.debug)
-        HYD_UIU_print_params();
-
     /* Figure out what the active proxys are: in RUNTIME and
      * PERSISTENT modes, only proxys which have an executable are
      * active. In BOOT, BOOT_FOREGROUND and SHUTDOWN modes, all
      * proxys are active. */
     if (HYD_handle.launch_mode == HYD_LAUNCH_RUNTIME ||
         HYD_handle.launch_mode == HYD_LAUNCH_PERSISTENT) {
-        for (proxy = HYD_handle.proxy_list; proxy && proxy->exec_list;
+        for (proxy = HYD_handle.proxy_list;
+             proxy && (proxy->segment_list->start_pid <= HYD_handle.global_process_count);
              proxy = proxy->next)
             proxy->active = 1;
     }
@@ -178,6 +173,12 @@
             proxy->active = 1;
     }
 
+    status = HYD_UIU_merge_exec_info_to_proxy();
+    HYDU_ERR_POP(status, "unable to merge exec info\n");
+
+    if (HYD_handle.debug)
+        HYD_UIU_print_params();
+
     HYDU_time_set(&HYD_handle.start, NULL); /* NULL implies right now */
     if (getenv("MPIEXEC_TIMEOUT"))
         timeout = atoi(getenv("MPIEXEC_TIMEOUT"));

Modified: mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c	2009-10-11 23:33:52 UTC (rev 5446)
+++ mpich2/trunk/src/pm/hydra/ui/mpiexec/utils.c	2009-10-12 18:43:14 UTC (rev 5447)
@@ -168,6 +168,7 @@
     HYD_handle.proxy_list->segment_list->proc_count = num_procs;
 
     HYD_handle.proxy_list->core_count += num_procs;
+    HYD_handle.global_core_count += num_procs;
 
   fn_exit:
     HYDU_FUNC_EXIT();
@@ -224,6 +225,7 @@
             }
 
             HYD_handle.proxy_list->core_count += num_procs;
+            HYD_handle.global_core_count += num_procs;
         }
 
         pid += num_procs;
@@ -449,6 +451,7 @@
         HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "duplicate process count\n");
 
     exec_info->process_count = atoi(**argv);
+    HYD_handle.global_process_count += exec_info->process_count;
     (*argv)++;
 
   fn_exit:

Modified: mpich2/trunk/src/pm/hydra/ui/utils/uiu.c
===================================================================
--- mpich2/trunk/src/pm/hydra/ui/utils/uiu.c	2009-10-11 23:33:52 UTC (rev 5446)
+++ mpich2/trunk/src/pm/hydra/ui/utils/uiu.c	2009-10-12 18:43:14 UTC (rev 5447)
@@ -46,9 +46,10 @@
 
     /* FIXME: Should the timers be initialized? */
 
+    HYD_handle.proxy_list = NULL;
     HYD_handle.global_core_count = 0;
     HYD_handle.exec_info_list = NULL;
-    HYD_handle.proxy_list = NULL;
+    HYD_handle.global_process_count = 0;
 
     HYD_handle.func_depth = 0;
     HYD_handle.stdin_buf_offset = 0;
@@ -192,9 +193,6 @@
 
     HYDU_FUNC_ENTER();
 
-    for (proxy = HYD_handle.proxy_list; proxy; proxy = proxy->next)
-        HYD_handle.global_core_count += proxy->core_count;
-
     proxy = HYD_handle.proxy_list;
     exec_info = HYD_handle.exec_info_list;
     proxy_rem_procs = proxy->core_count;



More information about the mpich2-commits mailing list