void BaseLB::initLB(const CkLBOptions &opt) { seqno = opt.getSeqNo(); CkpvAccess(numLoadBalancers) ++; /* if (CkpvAccess(numLoadBalancers) - CkpvAccess(hasNullLB) > 1) CmiAbort("Error: try to create more than one load balancer strategies!"); */ theLbdb = CProxy_LBDatabase(_lbdb).ckLocalBranch(); lbname = "Unknown"; // register this load balancer to LBDatabase at the sequence number theLbdb->addLoadbalancer(this, seqno); }
void CentralLB::initLB(const CkLBOptions &opt) { #if CMK_LBDB_ON lbname = "CentralLB"; thisProxy = CProxy_CentralLB(thisgroup); // CkPrintf("Construct in %d\n",CkMyPe()); loadbalancer = thisgroup; // create and turn on by default receiver = theLbdb-> AddLocalBarrierReceiver((LDBarrierFn)(staticAtSync),(void*)(this)); notifier = theLbdb->getLBDB()-> NotifyMigrated((LDMigratedFn)(staticMigrated),(void*)(this)); startLbFnHdl = theLbdb->getLBDB()-> AddStartLBFn((LDStartLBFn)(staticStartLB),(void*)(this)); // CkPrintf("[%d] CentralLB initLB \n",CkMyPe()); if (opt.getSeqNo() > 0) turnOff(); stats_msg_count = 0; statsMsgsList = NULL; statsData = NULL; storedMigrateMsg = NULL; reduction_started = 0; // for future predictor if (_lb_predict) predicted_model = new FutureModel(_lb_predict_window); else predicted_model=0; // register user interface callbacks theLbdb->getLBDB()->SetupPredictor((LDPredictModelFn)(staticPredictorOn),(LDPredictWindowFn)(staticPredictorOnWin),(LDPredictFn)(staticPredictorOff),(LDPredictModelFn)(staticChangePredictor),(void*)(this)); myspeed = theLbdb->ProcessorSpeed(); migrates_completed = 0; future_migrates_completed = 0; migrates_expected = -1; future_migrates_expected = -1; cur_ld_balancer = _lb_args.central_pe(); // 0 default lbdone = 0; count_msgs=0; statsMsg = NULL; if (_lb_args.statsOn()) theLbdb->CollectStatsOn(); load_balancer_created = 1; #endif #ifdef TEMP_LDB logicalCoresPerNode=physicalCoresPerNode=4; logicalCoresPerChip=4; numSockets=1; #endif }
ComboCentLB::ComboCentLB(const CkLBOptions &opt): CentralLB(opt) { lbname = "ComboCentLB"; const char *lbs = theLbdb->loadbalancer(opt.getSeqNo()); if (CkMyPe() == 0) CkPrintf("[%d] ComboCentLB created with %s\n",CkMyPe(), lbs); char *lbcopy = strdup(lbs); char *p = strchr(lbcopy, ':'); if (p==NULL) return; p = strtok(p+1, ","); while (p) { LBAllocFn fn = getLBAllocFn(p); if (fn == NULL) { CkPrintf("LB> Invalid load balancer: %s.\n", p); CmiAbort(""); } BaseLB *alb = fn(); clbs.push_back((CentralLB*)alb); p = strtok(NULL, ","); } }
NodeLevelLB::NodeLevelLB(const CkLBOptions &opt): CBase_NodeLevelLB(opt) { lbname = "NodeLevelLB"; const char *lbs = theLbdb->loadbalancer(opt.getSeqNo()); if (CkMyPe() == 0) CkPrintf("[%d] NodeLevelLB created with %s\n",CkMyPe(), lbs); char *lbcopy = strdup(lbs); char *p = strchr(lbcopy, ':'); char *ptr = NULL; char *lbname; if (p==NULL) { CmiAbort("LB> Nodelevel load balancer not specified\n"); } lbname = strtok_r(p+1, ",", &ptr); while (lbname) { LBAllocFn fn = getLBAllocFn(lbname); if (fn == NULL) { CkPrintf("LB> Invalid load balancer: %s.\n", lbname); CmiAbort(""); } BaseLB *alb = fn(); clbs.push_back((CentralLB*)alb); lbname = strtok_r(NULL, ",", &ptr); } // HybridBaseLB constructs a default tree if (tree) { delete tree; } // Construct a tree with three levels where the lowest level is at the node // level tree = new ThreeLevelTree(CmiMyNodeSize()); num_levels = tree->numLevels(); initTree(); }