[mpich2-commits] r4178 - in mpich2/trunk/src: include mpid/ch3/channels/nemesis/nemesis/include mpid/common/locks

buntinas at mcs.anl.gov buntinas at mcs.anl.gov
Tue Mar 24 13:12:03 CDT 2009


Author: buntinas
Date: 2009-03-24 13:12:03 -0500 (Tue, 24 Mar 2009)
New Revision: 4178

Removed:
   mpich2/trunk/src/mpid/common/locks/mpidu_mem_barriers.h
Modified:
   mpich2/trunk/src/include/mpiatomic.h
   mpich2/trunk/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_atomics.h
   mpich2/trunk/src/mpid/common/locks/Makefile.sm
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_by_lock.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ia64.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intel_32_64.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intrinsics.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ppc.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_sicortex.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_nt_intrinsics.h
   mpich2/trunk/src/mpid/common/locks/mpidu_atomics_sun_atomic_ops.h
Log:
moved memory barriers implementations into per-architecture aromic primitive header files.  Fixes tickets #486 and #77

Modified: mpich2/trunk/src/include/mpiatomic.h
===================================================================
--- mpich2/trunk/src/include/mpiatomic.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/include/mpiatomic.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -10,7 +10,6 @@
 #include <stddef.h>
 #include <string.h>
 #include "mpidu_atomic_primitives.h"
-#include "mpidu_mem_barriers.h"
 #include "mpidu_queue.h"
 #include "mpiimpl.h"
 

Modified: mpich2/trunk/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_atomics.h
===================================================================
--- mpich2/trunk/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_atomics.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/ch3/channels/nemesis/nemesis/include/mpid_nem_atomics.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -11,6 +11,5 @@
 #include <mpidi_ch3i_nemesis_conf.h>
 
 #include <mpidu_atomic_primitives.h>
-#include <mpidu_mem_barriers.h>
 
 #endif /* MPID_NEM_ATOMICS_H */

Modified: mpich2/trunk/src/mpid/common/locks/Makefile.sm
===================================================================
--- mpich2/trunk/src/mpid/common/locks/Makefile.sm	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/Makefile.sm	2009-03-24 18:12:03 UTC (rev 4178)
@@ -1,5 +1,5 @@
 lib${MPILIBNAME}_a_SOURCES = mpidu_process_locks.c mpidu_atomic_primitives.c mpidu_queue.c
-HEADERS = mpidu_process_locks.h mpidu_atomic_primitives.h mpidu_mem_barriers.h mpidu_queue.h
+HEADERS = mpidu_process_locks.h mpidu_atomic_primitives.h mpidu_queue.h
 INCLUDES = -I${srcdir} -I../../../include -I${master_top_srcdir}/src/include
 
 # Create a local library as an option

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_by_lock.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_by_lock.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_by_lock.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -187,5 +187,10 @@
     return (int)prev;
 }
 
+/* lock/unlock provides barrier */
+#define MPIDU_Shm_write_barrier()      do {} while (0)
+#define MPIDU_Shm_read_barrier()       do {} while (0)
+#define MPIDU_Shm_read_write_barrier() do {} while (0)
+
 #endif /* defined(HAVE_PTHREAD_H) */
 #endif /* !defined(MPIDU_ATOMICS_BY_LOCK_H_INCLUDED) */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ia64.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ia64.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ia64.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -149,6 +149,10 @@
     return val;
 }
 
+#define MPIDU_Shm_write_barrier()      __asm__ __volatile__  ("mf" ::: "memory" )
+#define MPIDU_Shm_read_barrier()       __asm__ __volatile__  ("mf" ::: "memory" )
+#define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ("mf" ::: "memory" )
+
 #include"mpidu_atomic_emulated.h"
 
 #endif /* MPIDU_ATOMICS_GCC_IA64_H_INCLUDED */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intel_32_64.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intel_32_64.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intel_32_64.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -156,6 +156,10 @@
     return val;
 }
 
+#define MPIDU_Shm_write_barrier()      __asm__ __volatile__  ( "sfence" ::: "memory" )
+#define MPIDU_Shm_read_barrier()       __asm__ __volatile__  ( "lfence" ::: "memory" )
+#define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ( "mfence" ::: "memory" )
+
 #include"mpidu_atomic_emulated.h"
 
 #endif /* MPIDU_ATOMICS_GCC_INTEL_32_64_H_INCLUDED */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intrinsics.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intrinsics.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_intrinsics.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -64,6 +64,10 @@
 #define MPIDU_Atomic_swap_aint_by_cas MPIDU_Atomic_swap_aint 
 #endif
 
+#define MPIDU_Shm_write_barrier()      __sync_synchronize()
+#define MPIDU_Shm_read_barrier()       __sync_synchronize()
+#define MPIDU_Shm_read_write_barrier() __sync_synchronize()
+
 #include"mpidu_atomic_emulated.h"
 
 #endif /* MPIDU_ATOMICS_GCC_INTRINSICS_H_INCLUDED */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ppc.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ppc.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_ppc.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -85,6 +85,13 @@
 #define MPIDU_Atomic_swap_int_by_llsc       MPIDU_Atomic_swap_int
 #define MPIDU_Atomic_swap_aint_by_llsc      MPIDU_Atomic_swap_aint
 
+/* FIXME: "sync" is a full memory barrier, we should look into using
+   less costly barriers (like lwsync or eieio) where appropriate
+   whenever they're available */
+#define MPIDU_Shm_write_barrier()      __asm__ __volatile__  ("sync" ::: "memory" )
+#define MPIDU_Shm_read_barrier()       __asm__ __volatile__  ("sync" ::: "memory" )
+#define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ("sync" ::: "memory" )
+
 #include"mpidu_atomic_emulated.h"
 
 #endif /* MPIDU_ATOMICS_GCC_PPC_H_INCLUDED */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_sicortex.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_sicortex.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_gcc_sicortex.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -379,4 +379,8 @@
     return(shmemi_swap_4(&ptr->v, val));
 }
 
+#define MPIDU_Shm_write_barrier()      __asm__ __volatile__  ("sync" ::: "memory" )
+#define MPIDU_Shm_read_barrier()       __asm__ __volatile__  ("sync" ::: "memory" )
+#define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ("sync" ::: "memory" )
+
 #endif /* MPIDU_ATOMICS_GCC_SICORTEX_H */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_nt_intrinsics.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_nt_intrinsics.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_nt_intrinsics.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -93,6 +93,11 @@
 /* Implement fetch_and_incr/decr using fetch_and_add (*_faa) */
 #define MPIDU_Atomic_fetch_and_incr MPIDU_Atomic_fetch_and_incr_by_faa
 #define MPIDU_Atomic_fetch_and_decr MPIDU_Atomic_fetch_and_decr_by_faa
+
+#define MPIDU_Shm_write_barrier()      _WriteBarrier()
+#define MPIDU_Shm_read_barrier()       _ReadBarrier()
+#define MPIDU_Shm_read_write_barrier() _ReadWriteBarrier()
+
 #include "mpidu_atomic_emulated.h"
 
 #endif /* defined(MPIDU_ATOMICS_NT_INTRINSICS_H_INCLUDED) */

Modified: mpich2/trunk/src/mpid/common/locks/mpidu_atomics_sun_atomic_ops.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_atomics_sun_atomic_ops.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_atomics_sun_atomic_ops.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -102,6 +102,8 @@
     }
 }
 
+#define MPIDU_Shm_write_barrier()      membar_producer()
+#define MPIDU_Shm_read_barrier()       membar_consumer()
+#define MPIDU_Shm_read_write_barrier() do { membar_consumer(); membar_producer(); } while (0)
 
-
 #endif /* MPIDU_ATOMICS_SUN_ATOMIC_OPS_H_INCLUDED */

Deleted: mpich2/trunk/src/mpid/common/locks/mpidu_mem_barriers.h
===================================================================
--- mpich2/trunk/src/mpid/common/locks/mpidu_mem_barriers.h	2009-03-24 13:17:23 UTC (rev 4177)
+++ mpich2/trunk/src/mpid/common/locks/mpidu_mem_barriers.h	2009-03-24 18:12:03 UTC (rev 4178)
@@ -1,45 +0,0 @@
-/* -*- Mode: C; c-basic-offset:4 ; -*- */
-/*
- *  (C) 2001 by Argonne National Laboratory.
- *      See COPYRIGHT in top-level directory.
- */
-
-#ifndef MPIDU_MEM_BARRIERS_H_INCLUDED
-#define MPIDU_MEM_BARRIERS_H_INCLUDED
-
-/* TODO fill more of these in, including versions that use the AO lib */
-
-#include <mpichconf.h>
-
-#if defined(HAVE_NT_INTRINSICS)
-#include <intrin.h>
-#endif
-
-#if defined(HAVE_GCC_AND_PENTIUM_ASM) || defined(HAVE_GCC_AND_X86_64_ASM)
-#  define MPIDU_Shm_write_barrier() __asm__ __volatile__  ( "sfence" ::: "memory" )
-#  define MPIDU_Shm_read_barrier() __asm__ __volatile__  ( "lfence" ::: "memory" )
-#  define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ( "mfence" ::: "memory" )
-#elif defined(HAVE_MASM_AND_X86)
-#  define MPIDU_Shm_write_barrier()
-#  define MPIDU_Shm_read_barrier() __asm { __asm _emit 0x0f __asm _emit 0xae __asm _emit 0xe8 }
-#  define MPIDU_Shm_read_write_barrier()
-#elif defined(HAVE_GCC_AND_IA64_ASM)
-#  define MPIDU_Shm_write_barrier() __asm__ __volatile__  ("mf" ::: "memory" )
-#  define MPIDU_Shm_read_barrier() __asm__ __volatile__  ("mf" ::: "memory" )
-#  define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ("mf" ::: "memory" )
-#elif defined(HAVE_NT_INTRINSICS)
-#   define MPIDU_Shm_write_barrier() {_WriteBarrier();}
-#   define MPIDU_Shm_read_barrier() {_ReadBarrier();}
-#   define MPIDU_Shm_read_write_barrier() {_ReadWriteBarrier();}
-#elif defined(HAVE_GCC_AND_SICORTEX_ASM)
-#  define MPIDU_Shm_write_barrier() __asm__ __volatile__  ("sync" ::: "memory" )
-#  define MPIDU_Shm_read_barrier() __asm__ __volatile__  ("sync" ::: "memory" )
-#  define MPIDU_Shm_read_write_barrier() __asm__ __volatile__  ("sync" ::: "memory" )
-#else
-/* FIXME this should probably be a configure/winconfigure test instead. */
-#  define MPIDU_Shm_write_barrier()      MPID_Abort(MPIR_Process.comm_self, MPI_ERR_OTHER, 1, "memory barriers not implemented on this platform")
-#  define MPIDU_Shm_read_barrier()       MPID_Abort(MPIR_Process.comm_self, MPI_ERR_OTHER, 1, "memory barriers not implemented on this platform")
-#  define MPIDU_Shm_read_write_barrier() MPID_Abort(MPIR_Process.comm_self, MPI_ERR_OTHER, 1, "memory barriers not implemented on this platform")
-#endif
-
-#endif /* defined(MPIDU_MEM_BARRIERS_H_INCLUDED) */



More information about the mpich2-commits mailing list