The new version of comlib! This version passed "make test" in charm/tests on order...
[charm.git] / src / ck-com / AAPLearner.h
1 /**
2    @addtogroup CharmComlib
3    @{
4 */
5
6 #ifndef AAPLEARNER_H
7 #define AAPLEARNER_H
8
9 #include "convcomlib.h"
10 #include "ComlibManager.h"
11 #include "ComlibLearner.h"
12
13 #define ALPHA       1e-5    //Total alpha overhead
14 #define ALPHA_NIC1  9e-6  //NIC alpha for short messages
15 #define ALPHA_NIC2  6e-6  //NIC alpha
16
17 #define ALPHA_CHARM 2e-6  //Charm++ processing after message has been received
18                              //Includes malloc and scheduling overheads
19
20 #define GAMMA_NIC   2.6e-9   //DMA bandwidth to copy data into NIC memory
21 #define BETA        4e-9   //Network bandwidth
22 #define GAMMA_MEM       9e-10     //Memory bandwidth (copied twice)
23
24 #define min(x,y) ((x < y) ? x : y)
25
26 inline double min4(double x, double y, double a, double b) {
27     double x1 = min(x,y);
28     double a1 = min(a,b);
29     
30     return min(x1,a1);
31
32
33 class AAPLearner : public ComlibLearner {
34     double alpha, beta;
35
36     double computeDirect(double P, double m, double d);
37     double computeMesh(double P, double m, double d);
38     double computeHypercube(double P, double m, double d);
39     double computeGrid(double P, double m, double d);
40
41  public:
42     AAPLearner();    
43
44     void init();
45     Strategy* optimizePattern(Strategy* , ComlibGlobalStats &);
46     
47     Strategy ** optimizePattern(Strategy** , ComlibGlobalStats &) {
48         CkAbort("Not implemented\n");
49         return NULL;
50     }
51 };
52
53
54 #endif
55
56 /*@}*/