Merge branch 'charm' of charmgit:charm into charm
authorYanhua Sun <yanhuas@jyc1.(none)>
Tue, 3 Apr 2012 20:04:03 +0000 (15:04 -0500)
committerYanhua Sun <yanhuas@jyc1.(none)>
Tue, 3 Apr 2012 20:04:03 +0000 (15:04 -0500)
src/ck-core/init.C
src/ck-perf/trace-common.C
src/ck-perf/trace-projections.C
src/ck-perf/trace-projections.h
src/util/TopoManager.C
src/util/TopoManager.h

index 776e8525d7fa81e00742f5fb4fbaa6a8e6db6461..41400042445ca91b29ed31f03e2e287cd35e10f3 100644 (file)
@@ -950,13 +950,6 @@ void _initCharm(int unused_argc, char **argv)
 { 
        int inCommThread = (CmiMyRank() == CmiMyNodeSize());
 
-       if(CmiMyNode() == 0 && CmiMyRank() == 0) {
-    if(CmiGetArgFlag(argv, "+printTopo")) {
-                       TopoManager tmgr;
-                       tmgr.printAllocation();
-               }
-       }
-
        DEBUGF(("[%d,%.6lf ] _initCharm started\n",CmiMyPe(),CmiWallTimer()));
 
        CkpvInitialize(size_t *, _offsets);
@@ -1259,6 +1252,14 @@ void _initCharm(int unused_argc, char **argv)
         CmiInitCPUTopology(argv);
     }
 
+       if(CmiMyPe() == 0) {
+            if(CmiGetArgFlag(argv, "+printTopo")) {
+               TopoManager tmgr;
+               tmgr.printAllocation(stdout);
+           }
+       }
+
+
 #if CMK_USE_PXSHM && CMK_CRAYXE && CMK_SMP
       // for SMP on Cray XE6 (hopper) it seems pxshm has to be initialized
       // again after cpuaffinity is done
index 4cb62e7ba87f85b53880929c89f255f9e6839b51..ce749b77dfb775ec73c4634f74ae0e714dea9f03 100644 (file)
@@ -164,7 +164,7 @@ static void traceCommonInit(char **argv)
 }
 
 /** Write out the common parts of the .sts file. */
-extern void traceWriteSTS(FILE *stsfp,int nUserEvents) {
+void traceWriteSTS(FILE *stsfp,int nUserEvents) {
   fprintf(stsfp, "MACHINE %s\n",CMK_MACHINE_NAME);
 #if CMK_SMP_TRACE_COMMTHREAD
   //Assuming there's only 1 comm thread now! --Chao Mei
index 26bffdef9e034475e3c472be9fbf0f44ebfd9da0..5d9681666bd4525602897d79436f53523572b057 100644 (file)
@@ -8,6 +8,7 @@
 #include "charm++.h"
 #include "trace-projections.h"
 #include "trace-projectionsBOC.h"
+#include "TopoManager.h"
 
 #if DEBUG_PROJ
 #define DEBUGF(...) CkPrintf(__VA_ARGS__)
@@ -379,6 +380,23 @@ void LogPool::createSts(const char *fix)
   delete[] fname;
 }  
 
+void LogPool::createTopo(const char *fix)
+{
+  CkAssert(CkMyPe() == 0);
+  // create the topo file
+  char *fname = new char[strlen(CkpvAccess(traceRoot))+strlen(fix)+strlen(".topo")+2];
+  sprintf(fname, "%s%s.topo", CkpvAccess(traceRoot), fix);
+  do
+    {
+      topofp = fopen(fname, "w");
+    } while (!stsfp && (errno == EINTR || errno == EMFILE));
+  if(stsfp==0){
+    CmiPrintf("Cannot open projections topo file for writing due to %s\n", strerror(errno));
+    CmiAbort("Error!!\n");
+  }
+  delete[] fname;
+}  
+
 void LogPool::createRC()
 {
   // create the projections rc file.
@@ -594,6 +612,12 @@ void LogPool::writeRC(void)
   fclose(rcfp);
 }
 
+void LogPool::writeTopo(void)
+{
+  TopoManager tmgr;
+  tmgr.printAllocation(topofp);
+  fclose(topofp);
+}
 
 #if CMK_BIGSIM_CHARM
 static void updateProjLog(void *data, double t, double recvT, void *ptr)
@@ -1021,6 +1045,7 @@ TraceProjections::TraceProjections(char **argv):
   if (CkMyPe() == 0) {
     _logPool->createSts();
     _logPool->createRC();
+    _logPool->createTopo();
   }
   funcCount=1;
 
@@ -1160,6 +1185,7 @@ void TraceProjections::closeTrace() {
     // CkPrintf("Pe 0 will now write sts and projrc files\n");
     _logPool->writeSts(this);
     _logPool->writeRC();
+    _logPool->writeTopo();
     // CkPrintf("Pe 0 has now written sts and projrc files\n");
   }
   delete _logPool;      // will write logs to file
index 3e03d4d43760ece7e6344cd5ffac1dcfa77774be..b13dee81764d877a103c56b43ebd93034bd6299f 100644 (file)
@@ -261,6 +261,7 @@ class LogPool {
     FILE *deltafp;
     FILE *stsfp;
     FILE *rcfp;
+    FILE *topofp;
     char *fname;
     char *dfname;
     char *pgmname;
@@ -297,6 +298,7 @@ class LogPool {
 #endif
     void createFile(const char *fix="");
     void createSts(const char *fix="");
+    void createTopo(const char *fix="");
     void createRC();
     void openLog(const char *mode);
     void closeLog(void);
@@ -305,6 +307,7 @@ class LogPool {
     void writeSts(void);
     void writeSts(TraceProjections *traceProj);
     void writeRC(void);
+    void writeTopo();
 
     void initializePhases() {
       keepPhase = new bool[numPhases];
index bd6a0ca9c4fa5d93510e2d9032c2496bbc1d08c7..fb89699448be9c6e3652ed0733133c8be8ea08ca 100644 (file)
@@ -414,15 +414,16 @@ int TopoManager::partition(int pe, int *pes, int *idx, int left, int right) {
   }
 }
 
-void TopoManager::printAllocation(
+void TopoManager::printAllocation(FILE *fp)
 {
        int i,x,y,z,t;
-       printf("Printing topology Info-\n");
-       printf("NumPes -  %d\n",numPes);
-       printf("Dims - %d %d %d\n",dimNX,dimNY,dimNZ);
-       printf("Rank - x y z t\n");
+       fprintf(fp, "Topology Info-\n");
+       fprintf(fp, "NumPes -  %d\n", numPes);
+       fprintf(fp, "Dims - %d %d %d\n",dimNX,dimNY,dimNZ);
+       fprintf(fp, "Rank - x y z t\n");
        for(i=0; i<numPes; i++) {
                rankToCoordinates(i,x,y,z,t);
-               printf("%d - %d %d %d %d\n",i,x,y,z,t);
+               fprintf(fp, "%d - %d %d %d %d\n",i,x,y,z,t);
        }
 }
+
index 27f3a62ecb853b3a4084bc118f4c5f8d67060d1d..083d90529c774158fa1e38cc0a0990c7725cab2d 100644 (file)
@@ -59,7 +59,7 @@ class TopoManager {
     void sortRanksByHops(int pe, int *pes, int *idx, int n);
     int pickClosestRank(int mype, int *pes, int n);
     int areNeighbors(int pe1, int pe2, int pe3, int distance);
-               void printAllocation();
+    void printAllocation(FILE *fp);
 
     /** The next 5 functions are only there for backward compatibility
     and should not be used */