//define PROJ_ANALYSIS
[charm.git] / src / ck-perf / trace-projectionsBOC.h
1 #include "envelope.h"
2 #include "register.h"
3 #include "trace-common.h"
4 #include "ckcallback-ccs.h"
5
6
7 #ifndef PROJ_ANALYSIS
8 // NOTE: Needed to handle the automatically-generated method so 
9 //   trace-projections would build correctly while ignoring any of the 
10 //   BOC-based definitions generated by parsing trace-projections.ci.
11 //   Hence, we do not include TraceProjections.decl.h in this version.
12 //
13 //   This version of trace-projections would not permit any form of
14 //   end-of-run operations and NONE of the definitions found in 
15 //   trace-projections.ci would be visible to the rest of the code
16 //   (trace-projections.C), so some care would be needed to ensure 
17 //   PROJ_ANALYSIS encloses the correct code-fragments in 
18 //   trace-projections.C
19 void _registerTraceProjections() {
20   // faked call that does nothing.
21 }
22 #else
23 #include "TraceProjections.decl.h"
24
25 class KMeansStatsMessage : public CMessage_KMeansStatsMessage {
26  public:
27   int numMetrics;
28   int numKPos;
29   int numStats;
30   bool *filter;
31   double *kSeedsPos;
32   double *stats;
33 };
34
35 class KSeedsMessage : public CMessage_KSeedsMessage {
36  public:
37   int numKPos;
38   double *kSeedsPos;
39 };
40
41 class TraceProjectionsInit : public Chare {
42  public:
43   TraceProjectionsInit(CkArgMsg *msg);
44  TraceProjectionsInit(CkMigrateMessage *m):Chare(m) {}
45 };
46
47 class KSelectionMessage : public CMessage_KSelectionMessage {
48  public:
49   int numKMinIDs;
50   int numKMaxIDs;
51   int *minIDs;
52   int *maxIDs;
53 };
54
55 class KMeansBOC : public CBase_KMeansBOC {
56  private:
57   // commandline parameters
58   bool autoCompute;
59   int numK;
60   int peNumKeep;
61   double entryThreshold;
62   bool usePhases;
63
64   int numKReported;
65
66   // variables for correct data gathering across phases
67   bool markedBegin;
68   bool markedIdle;
69   double beginBlockTime;
70   double beginIdleBlockTime;
71   int lastBeginEPIdx;
72   int numSelectionIter;
73   bool selected;
74
75   int currentPhase;
76   int lastPhaseIdx;
77   double *currentExecTimes;
78
79   // kMeans outlier structures - ALL processors will host this data
80   int numEntryMethods;
81   int numMetrics;
82   int phaseIter;
83
84   bool *keepMetric;
85   double *incKSeeds;
86   double minDistance; // distance to the closest seed
87   int lastMinK;
88   int minK; // the seed closest to the processor
89
90   // ONLY processor 0 will host this data, the location vector of K seeds
91   // This is actually a 2-D array, we need it to be contiguous for
92   //   communication purposes.
93   double *kSeeds; 
94   int *kNumMembers;
95
96   int *exemplarChoicesLeft;
97   int *outlierChoicesLeft;
98
99  public:
100  KMeansBOC(bool outlierAutomatic, int numKSeeds, int _peNumKeep,
101            double _entryThreshold, bool outlierUsePhases) :
102   autoCompute(outlierAutomatic), numK(numKSeeds), 
103     peNumKeep(_peNumKeep), entryThreshold(_entryThreshold),
104     usePhases(outlierUsePhases) {};
105  KMeansBOC(CkMigrateMessage *m):CBase_KMeansBOC(m) {};
106   
107   void startKMeansAnalysis();
108   void flushCheck(CkReductionMsg *msg);
109   void flushCheckDone();
110   void getNextPhaseMetrics();
111   void collectKMeansData(); // C++ method
112   void globalMetricRefinement(CkReductionMsg *msg);
113   void initKSeeds(); // C++ method
114   void findInitialClusters(KMeansStatsMessage *msg);
115   void updateKSeeds(CkReductionMsg *msg);
116   double calculateDistance(int k); // C++ method
117   void updateSeedMembership(KSeedsMessage *msg);
118   void findRepresentatives(); // C++ method
119   void collectDistances(KSelectionMessage *msg);
120   void findNextMinMax(CkReductionMsg *msg);
121   void phaseDone();
122
123   /*
124   void calculateWeights(KMeansStatsMessage *);
125   void determineOutliers(OutlierWeightMessage *);
126   void setOutliers(OutlierThresholdMessage *);
127   */
128 };
129
130 class TraceProjectionsBOC : public CBase_TraceProjectionsBOC {
131  private:
132   bool findOutliers;
133
134   int parModulesRemaining;
135
136   double dummy;
137   double endTime;
138   double analysisStartTime;
139  public:
140  TraceProjectionsBOC(bool _findOutliers) : findOutliers(_findOutliers) {};
141  TraceProjectionsBOC(CkMigrateMessage *m):CBase_TraceProjectionsBOC(m) {};
142
143   void traceProjectionsParallelShutdown();
144   void startEndTimeAnalysis();
145   void endTimeDone(CkReductionMsg *);
146   void kMeansDone(CkReductionMsg *);
147   void kMeansDone(void);
148   void finalize(void);
149   void shutdownAnalysis(void);
150   void closingTraces(void);
151   void closeParallelShutdown(CkReductionMsg *);
152
153   void ccsOutlierRequest(CkCcsRequestMsg *);
154 };
155 #endif