[mpich2-commits] r6752 - mpich2/trunk/src/include

goodell at mcs.anl.gov goodell at mcs.anl.gov
Thu May 27 12:55:55 CDT 2010


Author: goodell
Date: 2010-05-27 12:55:55 -0500 (Thu, 27 May 2010)
New Revision: 6752

Modified:
   mpich2/trunk/src/include/mpihandlemem.h
Log:
Make --enable-refcount=none never use a lock.

Adapted from r5920 on the bg-threads-1.1 branch.

No reviewer.

Modified: mpich2/trunk/src/include/mpihandlemem.h
===================================================================
--- mpich2/trunk/src/include/mpihandlemem.h	2010-05-27 04:51:46 UTC (rev 6751)
+++ mpich2/trunk/src/include/mpihandlemem.h	2010-05-27 17:55:55 UTC (rev 6752)
@@ -205,14 +205,37 @@
    --enable-g=log is selected.  MPIU_HANDLE_CHECK_REFCOUNT is
    defined above, and adds an additional sanity check for the refcounts
 */
-#if MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_NONE || \
-    MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_LOCK
+#if MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_NONE
 
-#if MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_NONE
 typedef int MPIU_Handle_ref_count;
+#define MPIU_HANDLE_REF_COUNT_INITIALIZER(val_) (val_)
+
+#define MPIU_Object_set_ref(objptr_,val)                 \
+    do {                                                 \
+        (objptr_)->ref_count = val;                      \
+        MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "set"); \
+    } while (0)
+
+/* must be used with care, since there is no synchronization for this read */
+#define MPIU_Object_get_ref(objptr_) \
+    ((objptr_)->ref_count)
+
+#define MPIU_Object_add_ref_always(objptr_)               \
+    do {                                                  \
+        (objptr_)->ref_count++;                           \
+        MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "incr"); \
+        MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"incr");       \
+    } while (0)
+#define MPIU_Object_release_ref_always(objptr_,inuse_ptr) \
+    do {                                                  \
+        *(inuse_ptr) = --((objptr_)->ref_count);          \
+        MPIU_HANDLE_LOG_REFCOUNT_CHANGE(objptr_, "decr"); \
+        MPIU_HANDLE_CHECK_REFCOUNT(objptr_,"decr");       \
+    } while (0)
+
 #elif MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_LOCK
+
 typedef volatile int MPIU_Handle_ref_count;
-#endif
 #define MPIU_HANDLE_REF_COUNT_INITIALIZER(val_) (val_)
 
 #define MPIU_Object_set_ref(objptr_,val)                 \
@@ -245,6 +268,7 @@
     } while (0)
 
 #elif MPIU_THREAD_REFCOUNT == MPIU_REFCOUNT_LOCKFREE
+
 #include "opa_primitives.h"
 typedef OPA_int_t MPIU_Handle_ref_count;
 #define MPIU_HANDLE_REF_COUNT_INITIALIZER(val_) OPA_INT_T_INITIALIZER(val_)



More information about the mpich2-commits mailing list