CmiBarrier() in timer init should be called on all ranks.
authorGengbin Zheng <gzheng@krakenpf4.nics.utk.edu>
Sat, 10 Apr 2010 02:50:58 +0000 (22:50 -0400)
committerGengbin Zheng <gzheng@krakenpf4.nics.utk.edu>
Sat, 10 Apr 2010 02:50:58 +0000 (22:50 -0400)
src/arch/mpi/machine.c

index b066d991bdf58ee2eb57e77a3bc80944070c68ca..bdc9b56975d8df99fb074f2c1d1aa9c8f8040f57 100644 (file)
@@ -180,6 +180,7 @@ static int mpi_tag = TAG;
 #define NEW_MPI_TAG    mpi_tag++; if (mpi_tag == MPI_TAG_UB) mpi_tag=TAG;
 */
 
+static int        _thread_provided = -1;
 int              _Cmi_numpes;
 int               _Cmi_mynode;    /* Which address space am I */
 int               _Cmi_mynodesize;/* Number of processors in my address space */
@@ -287,8 +288,8 @@ void CmiTimerInit()
 {
   _is_global = CmiTimerIsSynchronized();
 
-  if (CmiMyRank() == 0) {
-    if (_is_global) {
+  if (_is_global) {
+    if (CmiMyRank() == 0) {
       double minTimer;
 #if CMK_TIMER_USE_XT3_DCLOCK
       starttimer = dclock();
@@ -300,19 +301,22 @@ void CmiTimerInit()
                                   MPI_COMM_WORLD );
       starttimer = minTimer;
     }
-    else {
-      /* we don't have a synchronous timer, set our own start time */
-      CmiBarrier();
-      CmiBarrier();
-      CmiBarrier();
+  }
+  else {  /* we don't have a synchronous timer, set our own start time */
+    CmiBarrier();
+    CmiBarrier();
+    CmiBarrier();
 #if CMK_TIMER_USE_XT3_DCLOCK
-      starttimer = dclock();
+    starttimer = dclock();
 #else
-      starttimer = MPI_Wtime();
+    starttimer = MPI_Wtime();
 #endif
-    }
-    /*  timerLock = CmiCreateLock();  */
   }
+
+#if 0 && CMK_SMP && CMK_MPI_INIT_THREAD
+  if (CmiMyRank()==0 && _thread_provided == MPI_THREAD_SINGLE)
+    timerLock = CmiCreateLock();
+#endif
   CmiNodeAllBarrier();          /* for smp */
 }
 
@@ -1887,6 +1891,7 @@ void ConverseInit(int argc, char **argv, CmiStartFn fn, int usched, int initret)
   thread_level = MPI_THREAD_SINGLE;
 #endif
   MPI_Init_thread(&argc, &argv, thread_level, &provided);
+  _thread_provided = provided;
 #else
   MPI_Init(&argc, &argv);
   thread_level = 0;