
00001 // #ifdef filippo 00002 00003 // #include "AAMLearner.h" 00004 // #include "ComlibManager.h" 00005 00006 // #include "EachToManyMulticastStrategy.h" 00007 // //#include "RingMulticastStrategy.h" 00008 00009 // AAMLearner::AAMLearner() { 00010 // init(); 00011 // } 00012 00013 // void AAMLearner::init() { 00014 // alpha = ALPHA; 00015 // beta = BETA; 00016 // gamma = GAMMA; 00017 // } 00018 00019 // Strategy *AAMLearner::optimizePattern(Strategy *strat, 00020 // ComlibGlobalStats &stats) { 00021 // CharmStrategy *in_strat = (CharmStrategy *)strat; 00022 // double npes; //, *pelist; 00023 // CharmStrategy *ostrat = NULL; 00024 00025 // double degree = 0, msgsize = 0, nmsgs = 0; 00026 // stats.getAverageStats(strat->getInstance(), msgsize, nmsgs, 00027 // degree, npes); 00028 00029 // double dcost = computeDirect(npes, msgsize, degree); 00030 // double mcost = computeMesh(npes, msgsize, degree); 00031 // double gcost = computeGrid(npes, msgsize, degree); 00032 // double hcost = computeHypercube(npes, msgsize, degree); 00033 // double mincost = min4(dcost, mcost, gcost, hcost); 00034 00035 // int minstrat = -1; 00036 // if(in_strat->getType() == ARRAY_STRATEGY) { 00037 // CkArrayID said, daid; 00038 // CkArrayIndex *sidxlist, *didxlist; 00039 // int nsrc, ndest; 00040 00041 // in_strat->ainfo.getSourceArray(said, sidxlist, nsrc); 00042 // in_strat->ainfo.getDestinationArray(daid, didxlist, ndest); 00043 00044 // if(dcost == mincost) 00045 // minstrat = USE_DIRECT; 00046 00047 // else if(mcost == mincost) 00048 // minstrat = USE_MESH; 00049 // else if(gcost == mincost) 00050 // minstrat = USE_GRID; 00051 // else if(hcost == mincost) 00052 // minstrat = USE_HYPERCUBE; 00053 00054 // //CkPrintf("Choosing router %d, %g, %g, %g\n", minstrat, 00055 // // mcost, hcost, dcost); 00056 00057 // //if(minstrat != USE_DIRECT) { 00058 // ostrat = new EachToManyMulticastStrategy 00059 // (minstrat, said, daid, 00060 // nsrc, sidxlist, ndest, 00061 // didxlist); 00062 00063 // ostrat->setMulticast(); 00064 00065 // /* 00066 // } 00067 // else { 00068 // ostrat = new RingMulticastStrategy(said, daid); 00069 00070 // } 00071 // */ 00072 00073 // ostrat->setInstance(in_strat->getInstance()); 00074 // ((EachToManyMulticastStrategy *)ostrat)->enableLearning(); 00075 // } 00076 // else 00077 // CkAbort("Groups Not Implemented Yet\n"); 00078 00079 // //Group strategy implement later, foo bar !! 00080 00081 // return ostrat; 00082 // } 00083 00084 // //P = number of processors, m = msgsize, d = degree 00085 // double AAMLearner::computeDirect(double P, double m, double d) { 00086 // double cost = 0.0; 00087 // cost = d * alpha; 00088 // cost += d * m * beta; 00089 00090 // return cost; 00091 // } 00092 00093 // /******************* CHECK EQUATIONS FOR AAM ***********/ 00094 // //P = number of processors, m = msgsize, d = degree 00095 // double AAMLearner::computeMesh(double P, double m, double d) { 00096 // double cost = 0.0; 00097 // cost = 2 * sqrt((double) P) * alpha; 00098 // cost += d * m * (beta + gamma); 00099 00100 // return cost; 00101 // } 00102 00103 // //P = number of processors, m = msgsize, d = degree 00104 // double AAMLearner::computeHypercube(double P, double m, double d) { 00105 00106 // if(P == 0) 00107 // return 0; 00108 00109 // double cost = 0.0; 00110 // double log_2_P = log(P)/log(2.0); 00111 00112 // cost = log_2_P * alpha; 00113 // cost += d * m * (beta + gamma); 00114 00115 // return cost; 00116 // } 00117 00118 // //P = number of processors, m = msgsize, d = degree 00119 // double AAMLearner::computeGrid(double P, double m, double d) { 00120 00121 // double cost = 0.0; 00122 // cost = 3 * cubeRoot((double) P) * alpha; 00123 // cost += d * m * (beta + gamma); 00124 00125 // return cost; 00126 // } 00127 00128 // #endif
1.5.5