added a command line option +lb_gvt_pose to set the gvt intervals between load balancing.
[charm.git] / src / libs / ck-libs / pose / pose_config.h
1 /// POSE configuration parameters
2 /** This code provides all the switches for control over adaptivity,
3     communication, statistics gathering, load balancing, etc. */
4 #ifndef POSE_CONFIG_H
5 #define POSE_CONFIG_H
6 #include <limits.h>
7
8 /// Uncomment to run POSE is sequential mode
9 //#define SEQUENTIAL_POSE 1
10
11 /// Uncomment to gather and print POSE statistics set
12 #define POSE_STATS_ON 1
13 /// Insane level of analysis
14 //#define POSE_DOP_ON 1
15 /// Projections analysis
16 //#define TRACE_DETAIL 1
17
18 /// Set this to use 64 bit timestamps
19 #define USE_LONG_TIMESTAMPS 1
20
21 /// Uncomment to force determinism in event ordering
22 //#define DETERMINISTIC_EVENTS 1
23
24 /// Uncomment this to turn on coarse memory management
25 #define MEM_COARSE
26 #define MAX_USAGE 5   // maximum checkpoints per object for coarse mem. man.
27
28 /// Uncomment to save time on memory allocation and freeing
29 #define MSG_RECYCLING 1
30
31 /// Uncomment to use temporally-blocked memory management
32 //#define MEM_TEMPORAL
33
34 /// Uncomment to make use of the Streaming Communication Library optimizations
35 //#define POSE_COMM_ON 1
36
37 /// Uncomment to turn on POSE load balancer
38 //#define LB_ON 1
39
40 #ifdef POSE_COMM_ON
41 #include <StreamingStrategy.h>
42 #include <MeshStreamingStrategy.h>
43 #include <PrioStreaming.h>
44 #endif
45
46 #define COMM_TIMEOUT 1
47 #define COMM_MAXMSG 20
48
49 /// Synchronization strategy constants
50 #define MAX_ITERATIONS 100  // maximum forward executions per Step call
51 #define STORE_RATE 5       // default checkpoint rate: 1 for every n events
52 #define SPEC_WINDOW 10      // speculative event window size
53 #define MIN_LEASH 10        // min speculative window for adaptive strategy
54 #define MAX_LEASH 100        // max  "     "     "     "        "     "
55 #define LEASH_FLEX 10        // leash increment
56
57 /// Load balancer constants
58 #define LB_SKIP 51          // LB done 1/LB_SKIP times GVT iterations
59 #define LB_THRESHOLD 4000   // 20 heavy objects
60 #define LB_DIFF 2000       // min diff between min and max load PEs
61
62 /// Checkpointing constants
63 #define POSE_CHECKPOINT_DIRECTORY "__pose_chkpt_files" // directory where checkpoint files are stored
64
65 // MISC
66 #define MAX_POOL_SIZE 40    // maximum size of a memory pool
67 #define MAX_RECYCLABLE 1000 // maximum size of a recyclable block
68 #define SEND 0
69 #define RECV 1
70 #define OPTIMISTIC 0
71 #define CONSERVATIVE 1
72
73 #if USE_LONG_TIMESTAMPS 
74 typedef CmiInt8 POSE_TimeType;
75 //we'd like to set UnsetTS to a very large negative value with some
76 //wiggle room for underflow.  But there are many maddeningly hard to
77 //find things which quietly break if its not -1.
78
79 #ifdef LLONG_MAX
80 const POSE_TimeType POSE_TimeMax=LLONG_MAX;
81 //const POSE_TimeType POSE_UnsetTS=LLONG_MIN+10LL;
82 const POSE_TimeType POSE_UnsetTS=-1LL;
83 #else
84 const POSE_TimeType POSE_TimeMax=9223372036854775807LL;
85 //const POSE_TimeType POSE_UnsetTS=(-POSE_TimeMax-1LL)+10LL;
86 const POSE_TimeType POSE_UnsetTS=-1LL;
87 #endif
88 #else
89 typedef int POSE_TimeType;
90 const POSE_TimeType POSE_TimeMax=INT_MAX;
91 const POSE_TimeType POSE_UnsetTS=-1;
92 #endif
93
94
95
96 // POSE Command line struct
97 //glorified struct
98 enum POSE_Commlib_strat {nostrat, stream, mesh, prio};
99
100 class POSE_Config 
101 {
102  public:
103   bool stats;
104   int start_proj;
105   int end_proj;
106   bool trace;
107   bool dop;
108   int max_usage;
109   bool msg_pool;
110   int msg_pool_size;
111   int max_pool_msg_size;
112   POSE_Commlib_strat commlib_strat;
113   int commlib_timeout;
114   int commlib_maxmsg;
115   bool lb_on;
116   int lb_skip;
117   int lb_threshold;
118   int lb_diff;
119   int store_rate;
120   int max_iter;
121   int spec_window;
122   int min_leash;
123   int max_leash;
124   int leash_flex;
125   bool deterministic;
126   int checkpoint_gvt_interval;
127   int checkpoint_time_interval;
128   int lb_gvt_interval;
129   /* one very long initializer line */
130   POSE_Config() :
131 #ifdef POSE_STATS_ON                   //w
132     stats(true),
133 #else
134     stats(false), 
135 #endif
136     start_proj(-1),
137     end_proj(-1),
138 #ifdef TRACE_DETAIL                    //w
139     trace(true),
140 #else      
141     trace(false),
142 #endif
143 #ifdef POSE_DOP_ON
144     dop(true),
145 #else
146     dop(false),
147 #endif
148     max_usage(MAX_USAGE),
149 /** MSG POOLING AND COMMLIB OPTIONS NOT SUPPORTED YET **/
150 #ifdef MSG_RECYCLING
151     msg_pool(true),
152 #else
153     msg_pool(false),
154 #endif
155     msg_pool_size(40),
156     max_pool_msg_size(1000),
157 #ifdef POSE_COMM_ON
158     commlib_strat(nostrat),
159 #else
160     commlib_strat(stream),
161 #endif
162     commlib_timeout(COMM_TIMEOUT),
163     commlib_maxmsg(COMM_MAXMSG),
164 #ifdef LB_ON
165     lb_on(true),                  //w
166 #else
167     lb_on(false),                 //w
168 #endif
169     lb_skip(LB_SKIP),             //w
170     lb_threshold(LB_THRESHOLD),   //w
171     lb_diff(LB_DIFF),             //w
172     store_rate(STORE_RATE),       //w
173     max_iter(MAX_ITERATIONS),     //apparently defunct 
174     spec_window(SPEC_WINDOW),     //w
175     min_leash(MIN_LEASH),         //w
176     max_leash(MAX_LEASH),         //w
177     leash_flex(LEASH_FLEX),       //w
178 #ifdef DETERMINISTIC_EVENTS        //w
179     deterministic(true),
180 #else
181     deterministic(false),
182 #endif
183     checkpoint_gvt_interval(0),
184     checkpoint_time_interval(0),
185     lb_gvt_interval(0)
186     {// all handled in initializer
187     }
188 };
189 PUPbytes(POSE_Config)
190
191 #endif