Attempt to merge with charm manually
authorNikhil Jain <nikhil@illinois.edu>
Wed, 12 Oct 2011 04:54:09 +0000 (23:54 -0500)
committerNikhil Jain <nikhil@illinois.edu>
Wed, 12 Oct 2011 04:54:09 +0000 (23:54 -0500)
16 files changed:
src/arch/gemini_gni-crayxe/conv-mach.h
src/arch/util/mempool.c
src/arch/util/mempool.h
src/conv-core/cpuaffinity.c
src/conv-core/cputopology.C
src/libs/ck-libs/TMRC2D/tri.h
src/libs/ck-libs/TMRC2D/vector2d.h [deleted file]
src/libs/ck-libs/ampi/ampi.C
src/libs/ck-libs/fem/Makefile
src/libs/ck-libs/fem/vector2d.h [deleted file]
src/libs/ck-libs/tmr/tri.h
src/libs/ck-libs/tmr/vector2d.h [deleted file]
src/scripts/Makefile
src/util/CrayNid.c
src/util/TopoManager.h
src/util/XTTorus.h

index a9646612c62e1f2f78e5508a375e23a64661fefd..de18e134b520810a651e0648fc60c28146f1a054 100644 (file)
@@ -3,6 +3,8 @@
 
 #define CMK_CRAYXE                                         1
 
+#define XE6_TOPOLOGY                                      1
+
 /* 1 if the machine has a function called "getpagesize()", 0 otherwise .
    used in the memory files of converse */
 #define CMK_GETPAGESIZE_AVAILABLE                          1
index d88111e954f65ba5476875ebeb585f46027ec12b..948276f5fbdc9a7dc8b7ac5adce76d4cbabfbccd 100644 (file)
@@ -1,7 +1,7 @@
 
 /** 
 
-Memory pool implementation , It is only good for Charm++ usage. The first 64 bytes provides additional information. sizeof(int)- size of this block(free or allocated), next gni_mem_handle_t, then void** point to the next available block. 
+Memory pool implementation , It is only good for Charm++ usage. The first 64 bytes provides additional information. sizeof(int)- size of this block(free or allocated), next mem_handle_t, then void** point to the next available block. 
 
 Written by Yanhua Sun 08-27-2011
 Generalized by Gengbin Zheng  10/5/2011
@@ -28,13 +28,13 @@ Generalized by Gengbin Zheng  10/5/2011
 static      size_t     expand_mem = 1024ll*1024*16;
 #else
 static      size_t     expand_mem = 1024*16;
-#endif 
+#endif
 
 mempool_type *mempool_init(size_t pool_size, mempool_newblockfn allocfn, mempool_freeblock freefn)
 {
     mempool_type *mptr;
     mempool_header *header;
-    gni_mem_handle_t  mem_hndl;
+    mem_handle_t  mem_hndl;
 
     void *pool = allocfn(&pool_size, &mem_hndl);
     mptr = (mempool_type*)pool;
@@ -43,15 +43,16 @@ mempool_type *mempool_init(size_t pool_size, mempool_newblockfn allocfn, mempool
     mptr->mempools_head.mempool_ptr = pool;
     mptr->mempools_head.mem_hndl = mem_hndl;
     mptr->mempools_head.size = pool_size;
-    mptr->mempools_head.next = NULL;
+    mptr->mempools_head.memblock_next = 0;
     header = (mempool_header *) ((char*)pool+sizeof(mempool_type));
     mptr->freelist_head = sizeof(mempool_type);
+    mptr->memblock_tail = 0;
+#if MEMPOOL_DEBUG
+    printf("[%d] pool: %p  free: %p\n", myrank, pool, header);
+#endif
     header->size = pool_size-sizeof(mempool_type)-sizeof(mempool_header);
     header->mem_hndl = mem_hndl;
     header->next_free = 0;
-#if MEMPOOL_DEBUG 
-    printf("[%d] Initiated pool of size %lld at %p\n",CmiMyPe(),pool_size,mptr);
-#endif
     return mptr;
 }
 
@@ -64,8 +65,11 @@ void mempool_destroy(mempool_type *mptr)
 
     while(mempools_head!= NULL)
     {
+#if MEMPOOL_DEBUG
+        printf("[%d] free mempool:%p\n", CmiMyPe(), mempools_head->mempool_ptr);
+#endif
         current=mempools_head;
-        mempools_head = mempools_head->next;
+        mempools_head = mempools_head->memblock_next?(mempool_block *)((char*)mptr+mempools_head->memblock_next):NULL;
         freefn(current->mempool_ptr, current->mem_hndl);
     }
 }
@@ -124,13 +128,10 @@ void*  mempool_malloc(mempool_type *mptr, int size, int expand)
 
     if(bestfit == NULL)
     {
-#if MEMPOOL_DEBUG 
-        printf("[%d] Expanding pool %p by %d\n",CmiMyPe(),mptr,CthSelf());
-#endif
         void *pool;
-        mempool_block   *expand_pool;
+        mempool_block   *expand_pool, *memblock_tail;
         size_t   expand_size;
-        gni_mem_handle_t  mem_hndl;
+        mem_handle_t  mem_hndl;
 
         if (!expand) return NULL;
 
@@ -140,29 +141,33 @@ void*  mempool_malloc(mempool_type *mptr, int size, int expand)
         expand_pool->mempool_ptr = pool;
         expand_pool->mem_hndl = mem_hndl;
         expand_pool->size = expand_size;
-        expand_pool->next = NULL;
-#if  MEMPOOL_DEBUG
-        printf("[%d] No memory has such free empty chunck of %d. expanding %p with new size %d\n", CmiMyPe(), size, expand_pool->mempool_ptr, expand_size);
+        expand_pool->memblock_next = 0;
+#if MEMPOOL_DEBUG
+        printf("[%d] No memory has such free empty chunck of %d. expanding %p with new size %ld\n", CmiMyPe(), size, expand_pool->mempool_ptr, expand_size);
 #endif
-        // FIXME: go to the end of link list
-        //while (mempools_head->next != NULL && mempools_head < expand_pool) mempools_head = mempools_head->next;
-        while (mempools_head->next != NULL) mempools_head = mempools_head->next;
-        mempools_head->next = expand_pool;
+         /* insert new block to memblock tail */
+        memblock_tail = (mempool_block*)((char*)mptr + mptr->memblock_tail);
+        memblock_tail->memblock_next = mptr->memblock_tail = (char*)expand_pool - (char*)mptr;
 
         bestfit = (mempool_header*)((char*)expand_pool->mempool_ptr + sizeof(mempool_block));
         bestfit->size = expand_size-sizeof(mempool_block);
         bestfit->mem_hndl = expand_pool->mem_hndl;
         bestfit->next_free = 0;
         bestfit_size = expand_size-sizeof(mempool_block);
-#if 0
+#if 1
+         /* insert bestfit to sorted free list */
+        previous = NULL;
         current = freelist_head_ptr;
-        while(current!= NULL && current < bestfit )
+        while (current) 
         {
-          previous = current;
-          current = current->next_free?(mempool_header*)((char *)mptr + current->next_free):NULL;
-        }
-#elif 0
+            if (current > bestfit) break;
+            previous = current;
+            current = current->next_free?(mempool_header*)((char *)mptr + current->next_free):NULL;
+        };
+        bestfit->next_free = current!=NULL? (char*)current-(char*)mptr:0;
+#else
         CmiAssert(bestfit > previous);
+        previous->next_free = (char*)bestfit-(char*)mptr;
 #endif
         bestfit_previous = previous;
         if (previous == NULL) {
@@ -231,23 +236,7 @@ void mempool_free(mempool_type *mptr, void *ptr_free)
     printf("[%d] INSIDE FREE ptr=%p, size=%d freehead=%p mutex: %p\n", CmiMyPe(), to_free, free_size, freelist_head, mptr->mutex);
 #endif
     
-    /*while(current!= NULL && current < to_free )
-    {
-#if  MEMPOOL_DEBUG
-        CmiPrintf("[%d] previous=%p, current=%p size:%d %p\n", CmiMyPe(), previous, current, current->size, (char*)current+current->size);
-#endif
-        previous = current;
-        current = current->next_free?(mempool_header*)((char*)mptr + current->next_free):NULL;
-    }*/
-    while(current!= NULL && memcmp(&current->mem_hndl, &to_free->mem_hndl, sizeof(gni_mem_handle_t))!=0)
-    {
-#if  MEMPOOL_DEBUG
-        CmiPrintf("[%d] previous=%p, current=%p size:%d %p\n", CmiMyPe(), previous, current, current->size, (char*)current+current->size);
-#endif
-        previous = current;
-        current = current->next_free?(mempool_header*)((char*)mptr + current->next_free):NULL;
-    }
-    while(current!= NULL && current < to_free && memcmp(&current->mem_hndl, &to_free->mem_hndl, sizeof(gni_mem_handle_t))==0)
+    while(current!= NULL && current < to_free )
     {
 #if  MEMPOOL_DEBUG
         CmiPrintf("[%d] previous=%p, current=%p size:%d %p\n", CmiMyPe(), previous, current, current->size, (char*)current+current->size);
@@ -259,12 +248,12 @@ void mempool_free(mempool_type *mptr, void *ptr_free)
     if (current) CmiPrintf("[%d] previous=%p, current=%p size:%d %p\n", CmiMyPe(), previous, current, current->size, free_lastbytes_pos);
 #endif
     //continuos with previous free space 
-    if(previous!= NULL && (char*)previous+previous->size == (char*)to_free &&  memcmp(&previous->mem_hndl, &to_free->mem_hndl, sizeof(gni_mem_handle_t))==0 )
+    if(previous!= NULL && (char*)previous+previous->size == (char*)to_free &&  memcmp(&previous->mem_hndl, &to_free->mem_hndl, sizeof(mem_handle_t))==0 )
     {
         previous->size +=  free_size;
         merged = 1;
     }
-    else if(current!= NULL && free_lastbytes_pos == current && memcmp(&current->mem_hndl, &to_free->mem_hndl, sizeof(gni_mem_handle_t))==0)
+    else if(current!= NULL && free_lastbytes_pos == current && memcmp(&current->mem_hndl, &to_free->mem_hndl, sizeof(mem_handle_t))==0)
     {
         to_free->size += current->size;
         to_free->next_free = current->next_free;
@@ -277,7 +266,7 @@ void mempool_free(mempool_type *mptr, void *ptr_free)
     }
     //continous, merge
     if(merged) {
-       if (previous!= NULL && current!= NULL && (char*)previous + previous->size  == (char *)current && memcmp(&previous->mem_hndl, &current->mem_hndl, sizeof(gni_mem_handle_t))==0)
+       if (previous!= NULL && current!= NULL && (char*)previous + previous->size  == (char *)current && memcmp(&previous->mem_hndl, &current->mem_hndl, sizeof(mem_handle_t))==0)
       {
          previous->size += current->size;
          previous->next_free = current->next_free;
index 0614e3a0b463d0b3f4312330625f760a9e71acaa..e78210cd39ee80911bbd8cd024c4725ef0ed687b 100644 (file)
@@ -7,31 +7,32 @@
 #if CMK_CONVERSE_GEMINI_UGNI
 #include "gni_pub.h"
 #include "pmi.h"
+typedef gni_mem_handle_t    mem_handle_t;
 #else
   // in uGNI, it is memory handler, other versions, this is an integer
   // a unique integer to represent the memory block
-typedef size_t   gni_mem_handle_t;
+typedef size_t    mem_handle_t;
 #endif
 
 // multiple mempool for different size allocation
 typedef struct mempool_block_t
 {
     void                *mempool_ptr;
-    gni_mem_handle_t    mem_hndl;
+    mem_handle_t    mem_hndl;
     int                 size;
-    struct              mempool_block_t *next;
+    size_t              memblock_next;     // offset to next memblock
 } mempool_block;
 
 
 typedef struct mempool_header
 {
   int size;
-  gni_mem_handle_t  mem_hndl;
+  mem_handle_t  mem_hndl;
   size_t            next_free;
 } mempool_header;
 
-typedef void * (* mempool_newblockfn)(size_t *size, gni_mem_handle_t *mem_hndl);
-typedef void (* mempool_freeblock)(void *ptr, gni_mem_handle_t mem_hndl);
+typedef void * (* mempool_newblockfn)(size_t *size, mem_handle_t *mem_hndl);
+typedef void (* mempool_freeblock)(void *ptr, mem_handle_t mem_hndl);
 
 // only at beginning of first block of mempool
 typedef struct mempool_type
@@ -40,6 +41,7 @@ typedef struct mempool_type
   mempool_newblockfn     newblockfn;
   mempool_freeblock      freeblockfn;
   size_t          freelist_head;
+  size_t          memblock_tail;
 } mempool_type;
 
 mempool_type *mempool_init(size_t pool_size, mempool_newblockfn newfn, mempool_freeblock freefn);
index f609698fb6b1ca2aec008504ca8db4b2b28a16c7..09fab1f648a4c17234c2e4b8581ed5730397dd06 100644 (file)
@@ -476,7 +476,7 @@ static int search_pemap(char *pecoremap, int pe)
   return i;
 }
 
-#if CMK_CRAYXT
+#if CMK_CRAYXT || CMK_CRAYXE
 extern int getXTNodeID(int mpirank, int nummpiranks);
 #endif
 
@@ -602,7 +602,7 @@ void CmiInitCPUAffinity(char **argv)
     return;
   }
 
-#if CMK_CRAYXT
+#if CMK_CRAYXT || CMK_CRAYXE
   if (CmiMyRank() == 0)
   {
     int numPes = CmiNumPes();
index 807cd99b652b07ee6e99f1ee3b45c3a1f26ae849..c96b62149cf06b2f1c5481c39845e03e75d3067f 100644 (file)
@@ -42,7 +42,7 @@
 #include "TopoManager.h"
 #endif
 
-#if CMK_CRAYXT
+#if CMK_CRAYXT || CMK_CRAYXE
 extern "C" int getXTNodeID(int mpirank, int nummpiranks);
 #endif
 
@@ -474,7 +474,7 @@ extern "C" void LrtsInitCpuTopo(char **argv)
     if (CmiMyPe()==0)  CmiPrintf("Charm++> Running on %d unique compute nodes (%d-way SMP).\n", cpuTopo.numNodes, CmiNumCores());
   }
   CmiNodeAllBarrier();
-#elif CMK_CRAYXT
+#elif CMK_CRAYXT || CMK_CRAYXE
   if(CmiMyRank() == 0) {
     int numPes = cpuTopo.numPes = CmiNumPes();
     int numNodes = CmiNumNodes();
index 7a35420b19f34f29777dd46f2442db862e201545..b634a7d2ddf622e4c903741f89dedd7f5080e94c 100644 (file)
@@ -3,7 +3,7 @@
 #ifndef TRI_H
 #define TRI_H
 
-#include <vector.h>
+#include <vector>
 #include "charm++.h"
 #include "tcharm.h"
 #include "charm-api.h"
diff --git a/src/libs/ck-libs/TMRC2D/vector2d.h b/src/libs/ck-libs/TMRC2D/vector2d.h
deleted file mode 100644 (file)
index 08cb1e4..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Orion's Standard Library
-Orion Sky Lawlor, 2/22/2000
-NAME:          vector2d.h
-
-DESCRIPTION:   C++ 2-Dimentional vector library (no templates)
-
-This file provides various utility routines for easily
-manipulating 2-D vectors-- included are arithmetic,
-dot product, magnitude and normalization terms. 
-All routines are provided right in the header file (for inlining).
-
-Converted from vector3d.h.
-
-*/
-
-#ifndef __OSL_VECTOR_2D_H
-#define __OSL_VECTOR_2D_H
-
-#include <math.h>
-
-typedef double real;
-
-//vector2d is a cartesian vector in 2-space-- an x and y.
-class vector2d {
-public:
-       real x,y;
-       vector2d(void) {}//Default consructor
-       //Simple 1-value constructor
-       explicit vector2d(const real init) {x=y=init;}
-       //Simple 1-value constructor
-       explicit vector2d(int init) {x=y=init;}
-       //2-value constructor
-       vector2d(const real Nx,const real Ny) {x=Nx;y=Ny;}
-       //Copy constructor
-       vector2d(const vector2d &copy) {x=copy.x;y=copy.y;}
-       
-       //Cast-to-real * operators (treat vector as array)
-       operator real *() {return &x;}
-       operator const real *() const {return &x;}
-       
-/*Arithmetic operations: these are carefully restricted to just those
- that make unambiguous sense (to me... now...  ;-)
-Counterexamples: vector*vector makes no sense (use .dot()) because
-real/vector is meaningless (and we'd want a*b/b==a for b!=0), 
-ditto for vector&vector (dot?), vector|vector (projection?), 
-vector^vector (cross?),real+vector, vector+=real, etc.
-*/
-       vector2d &operator=(const vector2d &b) {x=b.x;y=b.y;return *this;}
-       int operator==(const vector2d &b) const {return (x==b.x)&&(y==b.y);}
-       int operator!=(const vector2d &b) const {return (x!=b.x)||(y!=b.y);}
-       vector2d operator+(const vector2d &b) const {return vector2d(x+b.x,y+b.y);}
-       vector2d operator-(const vector2d &b) const {return vector2d(x-b.x,y-b.y);}
-       vector2d operator*(const real scale) const 
-               {return vector2d(x*scale,y*scale);}
-       friend vector2d operator*(const real scale,const vector2d &v)
-               {return vector2d(v.x*scale,v.y*scale);}
-       vector2d operator/(const real &div) const
-               {real scale=1.0/div;return vector2d(x*scale,y*scale);}
-       vector2d operator-(void) const {return vector2d(-x,-y);}
-       void operator+=(const vector2d &b) {x+=b.x;y+=b.y;}
-       void operator-=(const vector2d &b) {x-=b.x;y-=b.y;}
-       void operator*=(const real scale) {x*=scale;y*=scale;}
-       void operator/=(const real div) {real scale=1.0/div;x*=scale;y*=scale;}
-
-//Vector-specific operations
-       //Return the square of the magnitude of this vector
-       real magSqr(void) const {return x*x+y*y;}
-       //Return the magnitude (length) of this vector
-       real mag(void) const {return sqrt(magSqr());}
-       
-       //Return the square of the distance to the vector b
-       real distSqr(const vector2d &b) const 
-               {return (x-b.x)*(x-b.x)+(y-b.y)*(y-b.y);}
-       //Return the distance to the vector b
-       real dist(const vector2d &b) const {return sqrt(distSqr(b));}
-       
-       //Return the dot product of this vector and b
-       real dot(const vector2d &b) const {return x*b.x+y*b.y;}
-       //Return the cosine of the angle between this vector and b
-       real cosAng(const vector2d &b) const {return dot(b)/(mag()*b.mag());}
-       
-       //Return the "direction" (unit vector) of this vector
-       vector2d dir(void) const {return (*this)/mag();}
-
-       //Return the CCW perpendicular vector
-       vector2d perp(void) const {return vector2d(-y,x);}
-
-       //Return this vector scaled by that
-       vector2d &scale(const vector2d &b) {x*=b.x;y*=b.y;return *this;}
-       
-       //Return the largest coordinate in this vector
-       real max(void) {return (x>y)?x:y;}
-       //Make each of this vector's coordinates at least as big
-       // as the given vector's coordinates.
-       void enlarge(const vector2d &by)
-       {if (by.x>x) x=by.x; if (by.y>y) y=by.y;}
-};
-
-#endif //__OSL_VECTOR2D_H
-
-
index 8c7771378d3ac7ccd38332e10125cbc4af4d80d1..040c73c914879d314535a3f0801786811a4e6ca3 100644 (file)
@@ -2984,6 +2984,8 @@ static int copyDatatype(MPI_Comm comm,MPI_Datatype type,int count,const void *in
   return MPI_SUCCESS;
 }
 
+#define SYNCHRONOUS_REDUCE                           0
+
   CDECL
 int AMPI_Reduce(void *inbuf, void *outbuf, int count, int type, MPI_Op op,
     int root, MPI_Comm comm)
@@ -3023,11 +3025,22 @@ int AMPI_Reduce(void *inbuf, void *outbuf, int count, int type, MPI_Op op,
   msg->setCallback(reduceCB);
   MSG_ORDER_DEBUG(CkPrintf("[%d] AMPI_Reduce called on comm %d root %d \n",ptr->thisIndex,comm,rootIdx));
   ptr->contribute(msg);
+
   if (ptr->thisIndex == rootIdx){
     /*HACK: Use recv() to block until reduction data comes back*/
     if(-1==ptr->recv(MPI_REDUCE_TAG, MPI_REDUCE_SOURCE, outbuf, count, type, MPI_REDUCE_COMM))
       CkAbort("AMPI>MPI_Reduce called with different values on different processors!");
+
+#if SYNCHRONOUS_REDUCE
+      AmpiMsg *msg = new (0, 0) AmpiMsg(-1, MPI_REDUCE_TAG, -1, rootIdx, 0, MPI_REDUCE_COMM);
+      CProxy_ampi pa(ptr->getProxy());
+      pa.generic(msg);
+#endif
   }
+#if SYNCHRONOUS_REDUCE
+  ptr->recv(MPI_REDUCE_TAG, MPI_REDUCE_SOURCE, NULL, 0, type, MPI_REDUCE_COMM);
+#endif
+
 #if AMPI_COUNTER
   getAmpiParent()->counters.reduce++;
 #endif
index 095daf86e6271f277db0256f307707b5ae8103cf..36b42703916549bf3fad63bc9f668738fd144a45 100644 (file)
@@ -37,7 +37,6 @@ $(COMPATLIB): $(COMPAT)
 
 headers: $(HEADERS)
        cp $(HEADERS) $(CDIR)/include/
-       cp vector2d.h $(CDIR)/include/
        touch headers
 
 compat_init.o: compat_init.c
diff --git a/src/libs/ck-libs/fem/vector2d.h b/src/libs/ck-libs/fem/vector2d.h
deleted file mode 100644 (file)
index 4144246..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Orion's Standard Library
-Orion Sky Lawlor, 2/22/2000
-NAME:          vector2d.h
-
-DESCRIPTION:   C++ 2-Dimentional vector library (no templates)
-
-This file provides various utility routines for easily
-manipulating 2-D vectors-- included are arithmetic,
-dot product, magnitude and normalization terms. 
-All routines are provided right in the header file (for inlining).
-
-Converted from vector3d.h.
-
-*/
-
-#ifndef __OSL_VECTOR_2D_H
-#define __OSL_VECTOR_2D_H
-
-#include <math.h>
-
-#if defined(WIN32) && defined(max)
-#undef max
-#endif
-
-typedef double real;
-
-//vector2d is a cartesian vector in 2-space-- an x and y.
-class vector2d {
-public:
-       real x,y;
-       vector2d(void) {}//Default consructor
-       //Simple 1-value constructor
-       explicit vector2d(const real init) {x=y=init;}
-       //Simple 1-value constructor
-       explicit vector2d(int init) {x=y=init;}
-       //2-value constructor
-       vector2d(const real Nx,const real Ny) {x=Nx;y=Ny;}
-       //Copy constructor
-       vector2d(const vector2d &copy) {x=copy.x;y=copy.y;}
-       
-       //Cast-to-real * operators (treat vector as array)
-       operator real *() {return &x;}
-       operator const real *() const {return &x;}
-       
-/*Arithmetic operations: these are carefully restricted to just those
- that make unambiguous sense (to me... now...  ;-)
-Counterexamples: vector*vector makes no sense (use .dot()) because
-real/vector is meaningless (and we'd want a*b/b==a for b!=0), 
-ditto for vector&vector (dot?), vector|vector (projection?), 
-vector^vector (cross?),real+vector, vector+=real, etc.
-*/
-       vector2d &operator=(const vector2d &b) {x=b.x;y=b.y;return *this;}
-       int operator==(const vector2d &b) const {return (x==b.x)&&(y==b.y);}
-       int operator!=(const vector2d &b) const {return (x!=b.x)||(y!=b.y);}
-       vector2d operator+(const vector2d &b) const {return vector2d(x+b.x,y+b.y);}
-       vector2d operator-(const vector2d &b) const {return vector2d(x-b.x,y-b.y);}
-       vector2d operator*(const real scale) const 
-               {return vector2d(x*scale,y*scale);}
-       friend vector2d operator*(const real scale,const vector2d &v)
-               {return vector2d(v.x*scale,v.y*scale);}
-       vector2d operator/(const real &div) const
-               {real scale=1.0/div;return vector2d(x*scale,y*scale);}
-       vector2d operator-(void) const {return vector2d(-x,-y);}
-       void operator+=(const vector2d &b) {x+=b.x;y+=b.y;}
-       void operator-=(const vector2d &b) {x-=b.x;y-=b.y;}
-       void operator*=(const real scale) {x*=scale;y*=scale;}
-       void operator/=(const real div) {real scale=1.0/div;x*=scale;y*=scale;}
-
-//Vector-specific operations
-       //Return the square of the magnitude of this vector
-       real magSqr(void) const {return x*x+y*y;}
-       //Return the magnitude (length) of this vector
-       real mag(void) const {return sqrt(magSqr());}
-       
-       //Return the square of the distance to the vector b
-       real distSqr(const vector2d &b) const 
-               {return (x-b.x)*(x-b.x)+(y-b.y)*(y-b.y);}
-       //Return the distance to the vector b
-       real dist(const vector2d &b) const {return sqrt(distSqr(b));}
-       
-       //Return the dot product of this vector and b
-       real dot(const vector2d &b) const {return x*b.x+y*b.y;}
-       //Return the cosine of the angle between this vector and b
-       real cosAng(const vector2d &b) const {return dot(b)/(mag()*b.mag());}
-       
-       //Return the "direction" (unit vector) of this vector
-       vector2d dir(void) const {return (*this)/mag();}
-
-       //Return the CCW perpendicular vector
-       vector2d perp(void) const {return vector2d(-y,x);}
-
-       //Return this vector scaled by that
-       vector2d &scale(const vector2d &b) {x*=b.x;y*=b.y;return *this;}
-       
-       //Return the largest coordinate in this vector
-       real max(void) {return (x>y)?x:y;}
-       //Make each of this vector's coordinates at least as big
-       // as the given vector's coordinates.
-       void enlarge(const vector2d &by)
-       {if (by.x>x) x=by.x; if (by.y>y) y=by.y;}
-};
-
-#endif //__OSL_VECTOR2D_H
-
-
index d82aa460ebea70d171f0a1ce3bd3b94e1e4c8959..c71da04e2cb72443b7a78a702075b84df06df196 100644 (file)
@@ -2,7 +2,7 @@
 // Created by: Terry L. Wilmarth
 
 #include <math.h>
-#include <vector.h>
+#include <vector>
 #include "charm++.h"
 #include "tcharm.h"
 #include "charm-api.h"
diff --git a/src/libs/ck-libs/tmr/vector2d.h b/src/libs/ck-libs/tmr/vector2d.h
deleted file mode 100644 (file)
index 08cb1e4..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Orion's Standard Library
-Orion Sky Lawlor, 2/22/2000
-NAME:          vector2d.h
-
-DESCRIPTION:   C++ 2-Dimentional vector library (no templates)
-
-This file provides various utility routines for easily
-manipulating 2-D vectors-- included are arithmetic,
-dot product, magnitude and normalization terms. 
-All routines are provided right in the header file (for inlining).
-
-Converted from vector3d.h.
-
-*/
-
-#ifndef __OSL_VECTOR_2D_H
-#define __OSL_VECTOR_2D_H
-
-#include <math.h>
-
-typedef double real;
-
-//vector2d is a cartesian vector in 2-space-- an x and y.
-class vector2d {
-public:
-       real x,y;
-       vector2d(void) {}//Default consructor
-       //Simple 1-value constructor
-       explicit vector2d(const real init) {x=y=init;}
-       //Simple 1-value constructor
-       explicit vector2d(int init) {x=y=init;}
-       //2-value constructor
-       vector2d(const real Nx,const real Ny) {x=Nx;y=Ny;}
-       //Copy constructor
-       vector2d(const vector2d &copy) {x=copy.x;y=copy.y;}
-       
-       //Cast-to-real * operators (treat vector as array)
-       operator real *() {return &x;}
-       operator const real *() const {return &x;}
-       
-/*Arithmetic operations: these are carefully restricted to just those
- that make unambiguous sense (to me... now...  ;-)
-Counterexamples: vector*vector makes no sense (use .dot()) because
-real/vector is meaningless (and we'd want a*b/b==a for b!=0), 
-ditto for vector&vector (dot?), vector|vector (projection?), 
-vector^vector (cross?),real+vector, vector+=real, etc.
-*/
-       vector2d &operator=(const vector2d &b) {x=b.x;y=b.y;return *this;}
-       int operator==(const vector2d &b) const {return (x==b.x)&&(y==b.y);}
-       int operator!=(const vector2d &b) const {return (x!=b.x)||(y!=b.y);}
-       vector2d operator+(const vector2d &b) const {return vector2d(x+b.x,y+b.y);}
-       vector2d operator-(const vector2d &b) const {return vector2d(x-b.x,y-b.y);}
-       vector2d operator*(const real scale) const 
-               {return vector2d(x*scale,y*scale);}
-       friend vector2d operator*(const real scale,const vector2d &v)
-               {return vector2d(v.x*scale,v.y*scale);}
-       vector2d operator/(const real &div) const
-               {real scale=1.0/div;return vector2d(x*scale,y*scale);}
-       vector2d operator-(void) const {return vector2d(-x,-y);}
-       void operator+=(const vector2d &b) {x+=b.x;y+=b.y;}
-       void operator-=(const vector2d &b) {x-=b.x;y-=b.y;}
-       void operator*=(const real scale) {x*=scale;y*=scale;}
-       void operator/=(const real div) {real scale=1.0/div;x*=scale;y*=scale;}
-
-//Vector-specific operations
-       //Return the square of the magnitude of this vector
-       real magSqr(void) const {return x*x+y*y;}
-       //Return the magnitude (length) of this vector
-       real mag(void) const {return sqrt(magSqr());}
-       
-       //Return the square of the distance to the vector b
-       real distSqr(const vector2d &b) const 
-               {return (x-b.x)*(x-b.x)+(y-b.y)*(y-b.y);}
-       //Return the distance to the vector b
-       real dist(const vector2d &b) const {return sqrt(distSqr(b));}
-       
-       //Return the dot product of this vector and b
-       real dot(const vector2d &b) const {return x*b.x+y*b.y;}
-       //Return the cosine of the angle between this vector and b
-       real cosAng(const vector2d &b) const {return dot(b)/(mag()*b.mag());}
-       
-       //Return the "direction" (unit vector) of this vector
-       vector2d dir(void) const {return (*this)/mag();}
-
-       //Return the CCW perpendicular vector
-       vector2d perp(void) const {return vector2d(-y,x);}
-
-       //Return this vector scaled by that
-       vector2d &scale(const vector2d &b) {x*=b.x;y*=b.y;return *this;}
-       
-       //Return the largest coordinate in this vector
-       real max(void) {return (x>y)?x:y;}
-       //Make each of this vector's coordinates at least as big
-       // as the given vector's coordinates.
-       void enlarge(const vector2d &by)
-       {if (by.x>x) x=by.x; if (by.y>y) y=by.y;}
-};
-
-#endif //__OSL_VECTOR2D_H
-
-
index cf2782ef2385c20a694a770528fdbf38edd1de9c..dc7e4c636eea6c40340395df89a6f58fd8c03eed 100644 (file)
@@ -253,7 +253,7 @@ CKHEADERS=ck.h ckstream.h envelope.h init.h qd.h charm.h charm++.h \
          $(CVHEADERS) $(CONVCOMHEADERS)
 
 ALLHEADERS=$(CKHEADERS) \
-    simplemsg.h sm.h pvmc.h pvm3.h sdag.h \
+    simplemsg.h sm.h pvmc.h pvm3.h sdag.h vector2d.h \
        graph.h bitvecset.h ckset.h LBSimulation.h  \
        $(BLUE_HEADERS)
 
@@ -280,7 +280,7 @@ commitid.o: CC=$(CHARMC)
 
 headerlinks: dirs+sources Makefile $(ALLHEADERS)
        @[ "x$QUIET" = "x--quiet" ] || echo "Soft-linking headers..."
-       -@for hdr in $(ALLHEADERS) ; do test ! -f "../include/$$hdr" && ./system_ln "../tmp/$$hdr" ../include ; done
+       -for hdr in $(ALLHEADERS) ; do test ! -f "../include/$$hdr" && ./system_ln "../tmp/$$hdr" ../include ; done
        touch headerlinks
 
 dirs+sources:
index 378a6256f09d167bff2d58c81dbfd48f5adb26fd..05296c3a87e087cff71e86690dd7cd9eb1e2f807 100644 (file)
@@ -10,7 +10,7 @@
 #include <stdlib.h>
 #include "converse.h"
 
-#if CMK_CRAYXT
+#if CMK_CRAYXT || CMK_CRAYXE
 
 #if XT3_TOPOLOGY
 #include <catamount/cnos_mpi_os.h>
@@ -49,7 +49,7 @@ int getXTNodeID(int mpirank, int nummpiranks) {
 
 #endif /* CMK_CRAYXT */
 
-#if XT3_TOPOLOGY || XT4_TOPOLOGY || XT5_TOPOLOGY
+#if XT3_TOPOLOGY || XT4_TOPOLOGY || XT5_TOPOLOGY || XE6_TOPOLOGY
 
 #if !CMK_HAS_RCALIB
 #error "The Cray rca library is not available. Try 'module load rca' and rebuild"
@@ -64,6 +64,11 @@ int getXTNodeID(int mpirank, int nummpiranks) {
   #elif XT5_TOPOLOGY
   #define MAXNID 22020
   #define TDIM 12
+
+  #elif XE6_TOPOLOGY
+    /* hopper */
+  #define MAXNID 6384
+  #define TDIM 24
   #endif
 
 int *pid2nid;                   /* rank to node ID */
index 09b109da59196df9db36c894edbc0985d41b6164..c8f57670e71c940fae010b1a938fb5f6bba9b939 100644 (file)
@@ -20,7 +20,7 @@
 #include "BGPTorus.h"
 #elif XT3_TOPOLOGY
 #include "XT3Torus.h"
-#elif XT4_TOPOLOGY || XT5_TOPOLOGY
+#elif XT4_TOPOLOGY || XT5_TOPOLOGY || XE6_TOPOLOGY
 #include "XTTorus.h"
 #endif
 
index 9584e47a87bc97cb03546d0fdfc8d1017ad35136..ab6369fbc331b9354dff8c3da293af2b1f370617 100644 (file)
@@ -12,7 +12,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#if XT4_TOPOLOGY || XT5_TOPOLOGY
+#if XT4_TOPOLOGY || XT5_TOPOLOGY || XE6_TOPOLOGY
 
 // XDIM, YDIM, ZDIM and MAXNID depend on a specific Cray installation.
 // Please do NOT expect things to work if you use this code on a new
 #define ZDIM 24
 #define TDIM 12
 
+#elif XE6_TOPOLOGY
+   /* hopper */
+#define MAXNID 6384
+#define XDIM 17
+#define YDIM 8
+#define ZDIM 24
+#define TDIM 24
+
 #endif
 
 extern "C" int *pid2nid;