00001 #include "envelope.h"
00002 #include "register.h"
00003 #include "trace-common.h"
00004 #include "ckcallback-ccs.h"
00005
00006 #ifndef PROJ_ANALYSIS
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 void _registerTraceProjections() {
00019
00020 }
00021 #else
00022 #include "TraceProjections.decl.h"
00023
00024 class KMeansStatsMessage : public CMessage_KMeansStatsMessage {
00025 public:
00026 int numMetrics;
00027 int numKPos;
00028 int numStats;
00029 bool *filter;
00030 double *kSeedsPos;
00031 double *stats;
00032 };
00033
00034 class KSeedsMessage : public CMessage_KSeedsMessage {
00035 public:
00036 int numKPos;
00037 double *kSeedsPos;
00038 };
00039
00040 class TraceProjectionsInit : public Chare {
00041 public:
00042 TraceProjectionsInit(CkArgMsg *msg);
00043 TraceProjectionsInit(CkMigrateMessage *m):Chare(m) {}
00044 };
00045
00046 class KSelectionMessage : public CMessage_KSelectionMessage {
00047 public:
00048 int numKMinIDs;
00049 int numKMaxIDs;
00050 int *minIDs;
00051 int *maxIDs;
00052 };
00053
00054 class KMeansBOC : public CBase_KMeansBOC {
00055 private:
00056
00057 bool autoCompute;
00058 int numK;
00059 int peNumKeep;
00060 double entryThreshold;
00061 bool usePhases;
00062
00063 int numKReported;
00064
00065
00066 bool markedBegin;
00067 bool markedIdle;
00068 double beginBlockTime;
00069 double beginIdleBlockTime;
00070 int lastBeginEPIdx;
00071 int numSelectionIter;
00072 bool selected;
00073
00074 int currentPhase;
00075 int lastPhaseIdx;
00076 double *currentExecTimes;
00077
00078
00079 int numEntryMethods;
00080 int numMetrics;
00081 int phaseIter;
00082
00083 bool *keepMetric;
00084 double *incKSeeds;
00085 double minDistance;
00086 int lastMinK;
00087 int minK;
00088
00089
00090
00091
00092 double *kSeeds;
00093 int *kNumMembers;
00094
00095 int *exemplarChoicesLeft;
00096 int *outlierChoicesLeft;
00097
00098 public:
00099 KMeansBOC(bool outlierAutomatic, int numKSeeds, int _peNumKeep,
00100 double _entryThreshold, bool outlierUsePhases) :
00101 autoCompute(outlierAutomatic), numK(numKSeeds),
00102 peNumKeep(_peNumKeep), entryThreshold(_entryThreshold),
00103 usePhases(outlierUsePhases) {};
00104 KMeansBOC(CkMigrateMessage *m):CBase_KMeansBOC(m) {};
00105
00106 void startKMeansAnalysis();
00107 void flushCheck(CkReductionMsg *msg);
00108 void flushCheckDone();
00109 void getNextPhaseMetrics();
00110 void collectKMeansData();
00111 void globalMetricRefinement(CkReductionMsg *msg);
00112 void initKSeeds();
00113 void findInitialClusters(KMeansStatsMessage *msg);
00114 void updateKSeeds(CkReductionMsg *msg);
00115 double calculateDistance(int k);
00116 void updateSeedMembership(KSeedsMessage *msg);
00117 void findRepresentatives();
00118 void collectDistances(KSelectionMessage *msg);
00119 void findNextMinMax(CkReductionMsg *msg);
00120 void phaseDone();
00121
00122
00123
00124
00125
00126
00127 };
00128
00129 class TraceProjectionsBOC : public CBase_TraceProjectionsBOC {
00130 private:
00131 bool findOutliers;
00132 bool findStartTime;
00133
00134 int parModulesRemaining;
00135
00136 double dummy;
00137 double endTime;
00138 double analysisStartTime;
00139 int endPe;
00140 public:
00141 TraceProjectionsBOC(bool _findOutliers, bool _findStartTime) : findOutliers(_findOutliers), findStartTime(_findStartTime), parModulesRemaining(0), endPe(-1) {};
00142 TraceProjectionsBOC(CkMigrateMessage *m):CBase_TraceProjectionsBOC(m), parModulesRemaining(0), endPe(-1) {};
00143
00144 void traceProjectionsParallelShutdown(int);
00145 void startTimeAnalysis();
00146 void startTimeDone(CkReductionMsg *);
00147 void startEndTimeAnalysis();
00148 void endTimeDone(CkReductionMsg *);
00149 void kMeansDone(CkReductionMsg *);
00150 void kMeansDone(void);
00151 void finalize(void);
00152 void shutdownAnalysis(void);
00153 void closingTraces(void);
00154 void closeParallelShutdown(CkReductionMsg *);
00155
00156 void ccsOutlierRequest(CkCcsRequestMsg *);
00157 };
00158 #endif