[mpich2-commits] r6690 - in mpich2/trunk/src: include mpi/init mpid/ch3/channels/nemesis/include mpid/ch3/include mpid/ch3/src

goodell at mcs.anl.gov goodell at mcs.anl.gov
Thu May 20 13:44:41 CDT 2010


Author: goodell
Date: 2010-05-20 13:44:41 -0500 (Thu, 20 May 2010)
New Revision: 6690

Modified:
   mpich2/trunk/src/include/mpiimplthread.h
   mpich2/trunk/src/mpi/init/initthread.c
   mpich2/trunk/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h
   mpich2/trunk/src/mpid/ch3/include/mpidimpl.h
   mpich2/trunk/src/mpid/ch3/src/mpid_vc.c
Log:
fixes for per-object threading

per-object now compiles, although it segfaults on my laptop at least

No reviewer.

Modified: mpich2/trunk/src/include/mpiimplthread.h
===================================================================
--- mpich2/trunk/src/include/mpiimplthread.h	2010-05-20 18:44:37 UTC (rev 6689)
+++ mpich2/trunk/src/include/mpiimplthread.h	2010-05-20 18:44:41 UTC (rev 6690)
@@ -637,12 +637,9 @@
 #define MPIU_THREAD_CS_ENTER_PMI(_context) MPIU_THREAD_CS_ENTER_LOCKNAME_CHECKED(global_mutex)
 #define MPIU_THREAD_CS_EXIT_PMI(_context)  MPIU_THREAD_CS_EXIT_LOCKNAME_CHECKED(global_mutex)
 
-#define MPIU_THREAD_CS_ENTER_CONTEXTID(_context) \
-   MPIU_THREAD_CHECK_BEGIN MPIU_THREAD_CS_ENTER_LOCKNAME(global_mutex) MPIU_THREAD_CHECK_END
-#define MPIU_THREAD_CS_EXIT_CONTEXTID(_context) \
-   MPIU_THREAD_CHECK_BEGIN MPIU_THREAD_CS_EXIT_LOCKNAME(global_mutex) MPIU_THREAD_CHECK_END
-/* XXX DJG at the global level should CONTEXTID yield even though it
- * doesn't do anything at ENTER/EXIT? */
+/* TODO this can probably use its own mutex... */
+#define MPIU_THREAD_CS_ENTER_CONTEXTID(_context) MPIU_THREAD_CS_ENTER_LOCKNAME_CHECKED(global_mutex)
+#define MPIU_THREAD_CS_EXIT_CONTEXTID(_context)  MPIU_THREAD_CS_EXIT_LOCKNAME_CHECKED(global_mutex)
 #define MPIU_THREAD_CS_YIELD_CONTEXTID(_context) MPIU_THREAD_CS_YIELD_LOCKNAME_CHECKED(global_mutex)
 
 #elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_LOCK_FREE

Modified: mpich2/trunk/src/mpi/init/initthread.c
===================================================================
--- mpich2/trunk/src/mpi/init/initthread.c	2010-05-20 18:44:37 UTC (rev 6689)
+++ mpich2/trunk/src/mpi/init/initthread.c	2010-05-20 18:44:41 UTC (rev 6690)
@@ -156,16 +156,6 @@
     MPID_Thread_mutex_create(&MPIR_ThreadInfo.global_mutex, NULL);
     MPID_Thread_mutex_create(&MPIR_ThreadInfo.handle_mutex, NULL);
 
-#ifdef MPID_THREAD_DEBUG
-    MPID_Thread_tls_create(MPIR_CleanupThreadStorage, 
-			   &MPIR_ThreadInfo.nest_storage, NULL);
-    { 
-	MPIU_ThreadDebug_t *nest_ptr = 
-	    (MPIU_ThreadDebug_t *) MPIU_Calloc( 2, sizeof(MPIU_ThreadDebug_t) );
-    MPID_Thread_tls_set( &MPIR_ThreadInfo.nest_storage, nest_ptr );
-    }
-#endif 
-
 #elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_LOCK_FREE
 /* Updates to shared data and access to shared services is handled without 
    locks where ever possible. */
@@ -201,15 +191,6 @@
     MPID_Thread_mutex_destroy(&MPIR_ThreadInfo.global_mutex, NULL);
     MPID_Thread_mutex_destroy(&MPIR_ThreadInfo.handle_mutex, NULL);
 
-#ifdef MPID_THREAD_DEBUG
-    { void *ptr;
-	MPID_Thread_tls_get( &MPIR_ThreadInfo.nest_storage, &ptr );
-	if (ptr) MPIU_Free( ptr );
-	MPID_Thread_tls_set( &MPIR_ThreadInfo.nest_storage, NULL );
-    }
-    MPID_Thread_tls_destroy( &MPIR_ThreadInfo.nest_storage, NULL);
-#endif
-
 #elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_LOCK_FREE
 /* Updates to shared data and access to shared services is handled without 
    locks where ever possible. */

Modified: mpich2/trunk/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h
===================================================================
--- mpich2/trunk/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h	2010-05-20 18:44:37 UTC (rev 6689)
+++ mpich2/trunk/src/mpid/ch3/channels/nemesis/include/mpidi_ch3_post.h	2010-05-20 18:44:41 UTC (rev 6690)
@@ -15,10 +15,10 @@
 #define MPIDI_CH3_Progress_end(state)
 #else
 #define MPIDI_CH3_Progress_start(progress_state_)                                       \
-{                                                                                       \
+do {                                                                                    \
     MPIU_THREAD_CS_ENTER(MPIDCOMM,);                                                    \
     (progress_state_)->ch.completion_count = MPIDI_CH3I_progress_completion_count;      \
-}
+} while (0)
 #define MPIDI_CH3_Progress_end(progress_state_) MPIU_THREAD_CS_EXIT(MPIDCOMM,)
 #endif
 

Modified: mpich2/trunk/src/mpid/ch3/include/mpidimpl.h
===================================================================
--- mpich2/trunk/src/mpid/ch3/include/mpidimpl.h	2010-05-20 18:44:37 UTC (rev 6689)
+++ mpich2/trunk/src/mpid/ch3/include/mpidimpl.h	2010-05-20 18:44:41 UTC (rev 6690)
@@ -1803,18 +1803,35 @@
 #ifdef MPICH_IS_THREADED
 #if MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_GLOBAL
 /* There is a single, global lock, held for the duration of an MPI call */
-#define MPIU_THREAD_CS_ENTER_CH3COMM(_context)
-#define MPIU_THREAD_CS_EXIT_CH3COMM(_context)
+#define MPIU_THREAD_CS_ENTER_CH3COMM(context_)
+#define MPIU_THREAD_CS_EXIT_CH3COMM(context_)
 
-/* XXX DJG PER_OBJECT needs lots of love down here at the device and channel levels */
 #elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_PER_OBJECT
 
+#define MPIU_THREAD_CS_ENTER_POBJ_MUTEX(mutex_p_)                                                           \
+    do {                                                                                                    \
+        MPIU_DBG_MSG_P(THREAD,VERBOSE,"attempting to ENTER per-object CS, mutex=%s", MPIU_QUOTE(mutex_p_)); \
+        /* FIXME do we need nest checking here? the existing macros won't work unmodified...*/              \
+        MPID_Thread_mutex_lock(mutex_p_);                                                                   \
+    } while (0)
+#define MPIU_THREAD_CS_EXIT_POBJ_MUTEX(mutex_p_)                                                            \
+    do {                                                                                                    \
+        MPIU_DBG_MSG_P(THREAD,VERBOSE,"attempting to EXIT per-object CS, mutex=%s", MPIU_QUOTE(mutex_p_));  \
+        /* FIXME do we need nest checking here? the existing macros won't work unmodified...*/              \
+        MPID_Thread_mutex_unlock(mutex_p_);                                                                 \
+    } while (0)
+
 /* There is a per object lock */
-#define MPIU_THREAD_CS_ENTER_CH3COMM(_context) {\
-   MPIU_THREAD_CHECK_BEGIN MPIU_THREAD_CS_ENTER_POBJ_LOCKNAME(_context->pobj_mutex) MPIU_THREAD_CHECK_END \
-}
-#define MPIU_THREAD_CS_EXIT_CH3COMM(_context) \
-   MPIU_THREAD_CHECK_BEGIN MPIU_THREAD_CS_EXIT_POBJ_LOCKNAME(_context->pobj_mutex) MPIU_THREAD_CHECK_END
+#define MPIU_THREAD_CS_ENTER_CH3COMM(context_)                      \
+    do {                                                            \
+        if (MPIU_ISTHREADED)                                        \
+            MPIU_THREAD_CS_ENTER_POBJ_MUTEX(&context_->pobj_mutex); \
+    } while (0)
+#define MPIU_THREAD_CS_EXIT_CH3COMM(context_)                       \
+    do {                                                            \
+        if (MPIU_ISTHREADED)                                        \
+            MPIU_THREAD_CS_EXIT_POBJ_MUTEX(&context_->pobj_mutex);  \
+    } while (0)
 
 #elif MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_SINGLE
 /* No thread support, make all operations a no-op */

Modified: mpich2/trunk/src/mpid/ch3/src/mpid_vc.c
===================================================================
--- mpich2/trunk/src/mpid/ch3/src/mpid_vc.c	2010-05-20 18:44:37 UTC (rev 6689)
+++ mpich2/trunk/src/mpid/ch3/src/mpid_vc.c	2010-05-20 18:44:41 UTC (rev 6690)
@@ -720,7 +720,7 @@
     /* FIXME: We need a better abstraction for initializing the thread state 
        for an object */
 #if MPIU_THREAD_GRANULARITY == MPIU_THREAD_GRANULARITY_PER_OBJECT
-    MPID_Thread_mutex_create(&vc->pobj_mutex,NULL)
+    MPID_Thread_mutex_create(&vc->pobj_mutex,NULL);
 #endif /* MPIU_THREAD_GRANULARITY */
     MPIU_CALL(MPIDI_CH3,VC_Init( vc ));
     MPIU_DBG_PrintVCState(vc);



More information about the mpich2-commits mailing list