void HbmLB::ResumeClients(int balancing) { #if CMK_LBDB_ON DEBUGF(("[%d] ResumeClients. \n", CkMyPe())); theLbdb->incStep(); // reset LevelData *lData = levelData[0]; lData->clear(); if (CkMyPe() == 0 && balancing) { double end_lb_time = CkWallTimer(); if (_lb_args.debug()) CkPrintf("[%s] Load balancing step %d finished at %f duration %f\n", lbName(), step()-1,end_lb_time,end_lb_time - start_lb_time); } if (balancing && _lb_args.printSummary()) { int count = 1; LBInfo info(count); LDStats *stats = &myStats; info.getInfo(stats, count, 0); // no comm cost LBRealType mLoad, mCpuLoad, totalLoad; info.getSummary(mLoad, mCpuLoad, totalLoad); int nmsgs, nbytes; stats->computeNonlocalComm(nmsgs, nbytes); CkPrintf("[%d] Load with %d objs: max (with comm): %f max (obj only): %f total: %f on %d processors at step %d useMem: %fKB nonlocal: %d %.2fKB.\n", CkMyPe(), stats->n_objs, mLoad, mCpuLoad, totalLoad, count, step()-1, (1.0*useMem())/1024, nmsgs, nbytes/1024.0); thisProxy[0].reportLBQulity(mLoad, mCpuLoad, totalLoad, nmsgs, 1.0*nbytes/1024.0); } // zero out stats theLbdb->ClearLoads(); theLbdb->ResumeClients(); #endif }
// migration done at current lbLevel void HbmLB::MigrationDone(int balancing) { #if CMK_LBDB_ON int i, j; LevelData *lData = levelData[0]; DEBUGF(("[%d] HbmLB::MigrationDone lbLevel:%d numLevels:%d!\n", CkMyPe(), lbLevel, tree->numLevels())); CmiAssert(newObjs.size() == lData->migrates_expected); #if 0 if (lbLevel == tree->numLevels()-1) { theLbdb->incStep(); // reset lData->clear(); } else { lData->migrates_expected = -1; lData->migrates_completed = 0; lData->obj_completed = 0; } #else lData->migrates_expected = -1; lData->migrates_completed = 0; lData->obj_completed = 0; #endif CkVec<LDObjData> &oData = myStats.objData; // update int count=0; for (i=0; i<oData.size(); i++) if (oData[i].handle.handle == -100) count++; CmiAssert(count == newObjs.size()); for (i=0; i<oData.size(); i++) { if (oData[i].handle.handle == -100) { LDObjHandle &handle = oData[i].handle; for (j=0; j<newObjs.size(); j++) { if (handle.omID() == newObjs[j].omID() && handle.objID() == newObjs[j].objID()) { handle = newObjs[j]; break; } } CmiAssert(j<newObjs.size()); } } newObjs.free(); thisProxy[lData->parent].NotifyObjectMigrationDone(0, lbLevel); #endif }