00001 #include "ckcallback-ccs.h"
00002 #include "TraceSummary.decl.h"
00003 #include <deque>
00004
00005 extern CkGroupID traceSummaryGID;
00006 extern bool summaryCcsStreaming;
00007
00008 class TraceSummaryInit : public Chare {
00009 public:
00010 TraceSummaryInit(CkArgMsg *m) {
00011 traceSummaryGID = CProxy_TraceSummaryBOC::ckNew();
00012 CProxy_TraceSummaryBOC sumProxy(traceSummaryGID);
00013
00014 CkCallback *cb = new CkCallback(CkIndex_TraceSummaryBOC::sendSummaryBOC(NULL), 0, sumProxy);
00015 CProxy_TraceSummaryBOC(traceSummaryGID).ckSetReductionClient(cb);
00016
00017
00018 summaryCcsStreaming = CmiFalse;
00019 }
00020 TraceSummaryInit(CkMigrateMessage *m):Chare(m) {}
00021 };
00022
00023 class TraceSummaryBOC : public CBase_TraceSummaryBOC {
00024 private:
00025 int count;
00026 BinEntry *bins;
00027 int nBins;
00028 int nTracedPEs;
00029
00030 bool firstTime;
00031 double _maxBinSize;
00032 public:
00033
00034 int lastRequestedIndexBlock;
00035 int indicesPerBlock;
00036 double collectionGranularity;
00037 int nBufferedBins;
00038 CkVec<double> *ccsBufferedData;
00039 int nextBinIndexCcs;
00040
00041 public:
00042 TraceSummaryBOC(void): count(0), bins(NULL), nBins(0),
00043 nTracedPEs(0), nextBinIndexCcs(0), firstTime(true) {};
00044 TraceSummaryBOC(CkMigrateMessage *m):CBase_TraceSummaryBOC(m) {};
00045 void startSumOnly();
00046 void askSummary(int size);
00047 void sendSummaryBOC(CkReductionMsg *);
00048
00049
00050 void initCCS();
00051 void ccsRequestSummaryDouble(CkCcsRequestMsg *m);
00052 void ccsRequestSummaryUnsignedChar(CkCcsRequestMsg *m);
00053
00054 void collectSummaryData(double startTime, double binSize, int numBins);
00055 void summaryDataCollected(CkReductionMsg *);
00056
00057 void traceSummaryParallelShutdown(int pe);
00058 void maxBinSize(CkReductionMsg *msg);
00059 void shrink(double _maxBinSize);
00060
00061 void sumData(CkReductionMsg *msg);
00062
00063 private:
00064 void write();
00065 };
00066
00067 void startCollectData(void *data, double currT);