[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