[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