Added a new gcc4 configuration for the XT3 machine option only.
authorChee Wai Lee <cheelee@illinois.edu>
Tue, 1 Aug 2006 20:07:43 +0000 (20:07 +0000)
committerChee Wai Lee <cheelee@illinois.edu>
Tue, 1 Aug 2006 20:07:43 +0000 (20:07 +0000)
The XT3 pcqueue hack is apparently no longer required. calloc fails to do
the right job on the XT3 and is currently changed to malloc/memset on the
platform. All other platforms will continue to use calloc.

A decision to use malloc/memset is prefered over the original hack because
it is unclear how the original even helped in the first place, raising
concerns that some bug remains unexercised on the system. malloc/memset
on the other hand behaves semantically the same as calloc though performance
is expected to suffer due to the result of making 2 system calls as opposed
to 1.

build
src/arch/mpi-crayxt3/cc-gcc4.h [new file with mode: 0644]
src/arch/mpi-crayxt3/cc-gcc4.sh [new file with mode: 0644]
src/arch/mpi-crayxt3/conv-mach.h
src/arch/util/pcqueue.h

diff --git a/build b/build
index 3d4f4d487fcc729852b5ca63522e6b28f7fd110c..b95c2dfb462525b9ec28e77e439e65338b782e09 100755 (executable)
--- a/build
+++ b/build
@@ -28,7 +28,7 @@ syntax() {
   ( cd $src ; ls -1 | egrep -v '(^CVS)|(^shmem$)|(^mpi$)|(^sim$)|(^net$)|(^elan$)|(^util$)|(^common$)|(^uth$)|(^conv-mach-fix.sh$)|(^win32$)|(^win64$)|(^paragon$)|(^vmi$)|(^lapi$)|(^cell$)|(^template$)' | pr -3 -t )
   echo ''
   echo '<options>: compiler and platform specific options'
-  echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 mpcc pathscale'
+  echo 'cc cc64 cxx kcc pgcc acc icc ecc gcc3 gcc4 mpcc pathscale'
   echo 'help smp gm tcp vmi scyld clustermatic bigsim ooc syncft papi'
   echo 'pthreads lam'
   echo '--incdir --libdir --basedir --no-build-shared -j'
@@ -47,6 +47,7 @@ syntax() {
   echo '  icc             Intel C/C++ compiler for Linux IA32'
   echo '  ecc             Intel C/C++ compiler for Linux IA64'
   echo '  gcc3            use gcc3 - GNU GCC/G++ version 3'
+  echo '  gcc4            use gcc4 - GNU GCC/G++ version 4 (only mpi-crayxt3)'
   echo '  mpcc            SUN Solaris C++ compiler for MPI'
   echo '  pathscale       use pathscale compiler suite'
   echo ''
@@ -205,6 +206,10 @@ shift
 VERSION=$1; BASEVERSION=$1; ARCH=`echo $1 | sed -e 's@-.*@@'`
 shift
 
+echo $src
+echo $BASEVERSION
+echo $ARCH
+
 OPT_DIRS="$src/$BASEVERSION $src/$ARCH $src/common"
 
 while [ ! $# -eq 0 ]
diff --git a/src/arch/mpi-crayxt3/cc-gcc4.h b/src/arch/mpi-crayxt3/cc-gcc4.h
new file mode 100644 (file)
index 0000000..2fc0d9a
--- /dev/null
@@ -0,0 +1,2 @@
+/* this is an empty file just because gcc4 is to be a supported option */
+/* on the XT3. */
diff --git a/src/arch/mpi-crayxt3/cc-gcc4.sh b/src/arch/mpi-crayxt3/cc-gcc4.sh
new file mode 100644 (file)
index 0000000..445e8a8
--- /dev/null
@@ -0,0 +1,3 @@
+export MPICH_CC="qk-gcc"
+export MPICH_CXX="qk-g++"
+
index 7fd624137f4640b91e0409cd1ede0b5c86f6a56f..5eb540f55ea35d52d803bb88083324e8e214c13e 100644 (file)
@@ -8,7 +8,9 @@
 #ifndef _CONV_MACH_H
 #define _CONV_MACH_H
 
-#define XT3_ONLY_PCQUEUE_WORKAROUND                        1
+#define CMK_XT3                                            1
+
+#define XT3_ONLY_PCQUEUE_WORKAROUND                        0
 
 #define CMK_CONVERSE_MPI                                   1
 
index 0eb0f3e9b244b54e4f69bb63ee3e19ff5724ec91..e47179785cc3b7ee8ed3d62ee92313c4ccf27784 100644 (file)
@@ -60,12 +60,13 @@ typedef struct PCQueueStruct
   CmiMemUnlock();\
 }
 
+#if !CMK_XT3
 #define MallocCircQueueStruct(dg) {\
   CircQueue d;\
   CmiMemLock();\
   d = Cmi_freelist_circqueuestruct;\
   if (d==(CircQueue)0){\
-    d = ((CircQueue)calloc(1, sizeof(struct CircQueueStruct)));\
+    d = ((CircQueue)calloc(1, sizeof(struct CircQueueStruct))); \
   }\
   else{\
     freeCount--;\
@@ -74,6 +75,23 @@ typedef struct PCQueueStruct
   dg = d;\
   CmiMemUnlock();\
 }
+#else
+#define MallocCircQueueStruct(dg) {\
+  CircQueue d;\
+  CmiMemLock();\
+  d = Cmi_freelist_circqueuestruct;\
+  if (d==(CircQueue)0){\
+    d = ((CircQueue)malloc(sizeof(struct CircQueueStruct))); \
+    d = ((CircQueue)memset(d, 0, sizeof(struct CircQueueStruct))); \
+  }\
+  else{\
+    freeCount--;\
+    Cmi_freelist_circqueuestruct = d->next;\
+    }\
+  dg = d;\
+  CmiMemUnlock();\
+}
+#endif
 
 PCQueue PCQueueCreate(void)
 {
@@ -81,8 +99,12 @@ PCQueue PCQueueCreate(void)
   PCQueue Q;
 
   /* MallocCircQueueStruct(circ); */
+#if !CMK_XT3
   circ = (CircQueue)calloc(1, sizeof(struct CircQueueStruct));
-
+#else
+  circ = (CircQueue)malloc(sizeof(struct CircQueueStruct));
+  circ = (CircQueue)memset(circ, 0, sizeof(struct CircQueueStruct));
+#endif
   Q = (PCQueue)malloc(sizeof(struct PCQueueStruct));
   _MEMCHECK(Q);
   Q->head = circ;
@@ -161,7 +183,12 @@ void PCQueuePush(PCQueue Q, char *data)
     /* this way, the next buffer is linked in before data is filled in 
        in the last slot of this buffer */
 
+#if CMK_XT3
     circ = (CircQueue)calloc(1, sizeof(struct CircQueueStruct));
+#else
+    circ = (CircQueue)malloc(sizeof(struct CircQueueStruct));
+    circ = (CircQueue)memset(circ, 0, sizeof(struct CircQueueStruct));
+#endif
     /* MallocCircQueueStruct(circ); */
 
     Q->tail->next = circ;