use rca_get_max_dimension to find dimension
authorGengbin Zheng <gzheng@illinois.edu>
Thu, 9 Aug 2012 17:16:18 +0000 (12:16 -0500)
committerGengbin Zheng <gzheng@illinois.edu>
Thu, 9 Aug 2012 17:16:18 +0000 (12:16 -0500)
src/scripts/configure.in
src/util/CrayNid.c

index 85ffaaab2d1ec7699e387ee82641da71903f58c2..f4d4508079640dfb1cbb5d58f1687c53a8136685 100644 (file)
@@ -1845,6 +1845,20 @@ EOT
 test_linkc "whether Cray rca library is available" "yes" "no" "-lrca"
 AC_DEFINE_UNQUOTED(CMK_HAS_RCALIB, $pass, [whether Cray rca library is available])
 
 test_linkc "whether Cray rca library is available" "yes" "no" "-lrca"
 AC_DEFINE_UNQUOTED(CMK_HAS_RCALIB, $pass, [whether Cray rca library is available])
 
+#### test if Cray mesh dimension query function will work ####
+cat > $tc <<EOT
+#include <rca_lib.h>
+
+int main() {
+    rca_mesh_coord_t xyz;
+    rca_get_max_dimension(&xyz);
+
+    return 0;
+}
+EOT
+test_linkc "whether Cray rca_has get_max_dimension" "yes" "no" "-lrca"
+AC_DEFINE_UNQUOTED(CMK_HAS_RCA_MAX_DIMENSION, $pass, [whether Cray rca has rca_get_max_dimension])
+
 #### query Cray machine max NID ####
 
 cmd=`which xtprocadmin 2>/dev/null`
 #### query Cray machine max NID ####
 
 cmd=`which xtprocadmin 2>/dev/null`
index df292e40b56c3b177d54b206d9e1495eff8a73bd..dadbeef5493ab485d2c4ae1b9976d2da6f3aa892 100644 (file)
@@ -205,6 +205,8 @@ void pidtonid(int numpes) {
 void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim)
 {
   int i = 0, ret;
 void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim)
 {
   int i = 0, ret;
+  rca_mesh_coord_t dimsize;
+
   CmiLock(cray_lock2);
 
   if(maxNID != -1) {
   CmiLock(cray_lock2);
 
   if(maxNID != -1) {
@@ -216,6 +218,16 @@ void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim)
        return;
   }
 
        return;
   }
 
+#if CMK_HAS_RCA_MAX_DIMENSION
+  // rca_get_meshtopology(&mnid);
+  rca_get_max_dimension(&dimsize);
+  *xdim = dimsize.mesh_x+1;
+  *ydim = dimsize.mesh_y+1;
+  *zdim = dimsize.mesh_z+1;
+  *maxnid = *xdim * *ydim * *zdim * 2;
+
+#else
+
   *xdim = *ydim = *zdim = 0;
     /* loop until fails to find the max */ 
   do {
   *xdim = *ydim = *zdim = 0;
     /* loop until fails to find the max */ 
   do {
@@ -240,7 +252,10 @@ void getDimension(int *maxnid, int *xdim, int *ydim, int *zdim)
   maxX = *xdim = *xdim+1;
   maxY = *ydim = *ydim+1;
   maxZ = *zdim = *zdim+1;
   maxX = *xdim = *xdim+1;
   maxY = *ydim = *ydim+1;
   maxZ = *zdim = *zdim+1;
+#endif
+
   CmiUnlock(cray_lock2);
   CmiUnlock(cray_lock2);
+
   /* printf("%d %d %d %d\n", *maxnid, *xdim, *ydim, *zdim); */
 }
 
   /* printf("%d %d %d %d\n", *maxnid, *xdim, *ydim, *zdim); */
 }