int petabricks::PetabricksRuntime::runMain(){ #ifdef HAVE_OPENCL int err; #endif JTIMER_SCOPE(runMain); switch(MODE){ case MODE_RUN_IO: #ifdef HAVE_OPENCL if( 0 != ( err = OpenCLUtil::init( ) ) ) { std::cout << "Failed to initialize OpenCL: error " << err << "." << std::endl; exit( -1 ); } #endif runNormal(); break; case MODE_IOGEN_CREATE: iogenCreate(iogenFiles(IOGEN_PFX)); break; case MODE_IOGEN_RUN: iogenRun(iogenFiles(IOGEN_PFX)); break; case MODE_RACE_CONFIGS: raceConfigs(_randSize); return _rv; break; case MODE_RUN_RANDOM: #ifdef HAVE_OPENCL if( 0 != ( err = OpenCLUtil::init( ) ) ) { std::cout << "Failed to initialize OpenCL: error " << err << "." << std::endl; exit(-1 ); } #endif runTrial(GRAPH_MAX_SEC, ACCTRAIN); break; case MODE_GRAPH_INPUTSIZE: runGraphMode(); break; case MODE_GRAPH_PARAM: runGraphParamMode(graphParam); break; case MODE_GRAPH_TEMPLATE: runGraphTemplate(); break; case MODE_GRAPH_THREADS: runGraphParallelMode(); break; case MODE_AUTOTUNE_PARAM: optimizeParameter(graphParam); break; case MODE_ABORT: case MODE_HELP: break; } if(FORCEOUTPUT && _rv==0){ JTIMER_SCOPE(forceoutput); std::vector<std::string> tmp; for(int i=_main->numInputs(); i-->0;) tmp.push_back(DEVNULL); for(int i=_main->numOutputs(); i-->0;) tmp.push_back("-"); _main->writeOutputs(tmp); } ACCURACY=!theAccuracies.empty(); DUMPTIMING=!theTimings.empty(); if(ACCURACY || DUMPTIMING || HASH) std::cout << "<root>\n <stats>\n"; if(ACCURACY){ std::cout << " <accuracy"; _dumpStats(std::cout, theAccuracies); std::cout << " />\n"; } if(DUMPTIMING){ std::cout << " <timing"; _dumpStats(std::cout, theTimings); std::cout << " />\n"; } if(HASH){ std::cout << " <outputhash value=\"0x" << theLastHash << "\" />\n"; } if(ACCURACY || DUMPTIMING || HASH) std::cout << " </stats>\n</root>\n" << std::flush; return _rv; }
//Return the stats collected void SedaStatsStage::dumpStats(StageEvent* ev) { #if SEDASTATS_MANAGE /*While returning stats the following are possible * 1) Return all stats under a category * 2) Return a specific stat under a specific category * 3) Return all categories and all stats * 4) Return a specific stat from any category * * Though 4) is possible, it would imply * that the same statId is being paired with multiple * categories. */ MgmtEvent* mev = dynamic_cast<MgmtEvent*>(ev); ASSERT(mev, "Expected Management Event"); Request* request = mev->getRequest(); CollectStatsRequest* statsReq = dynamic_cast<CollectStatsRequest*> (request); ASSERT(statsReq, "expected statsReq, did not find it"); SedaStats::sedaStatsCategory_t category = SedaStats::ALL_CATEGORY; SedaStats::sedaStatsIdentifier_t statsId = SedaStats::ALL_STATS; std::string statsIdStr; bool statsId_present = false; bool statsIdStr_present = false; // Check cegegory if(statsReq->category().present()) { unsigned int iCategory = statsReq->category().get(); if(iCategory >= SedaStats::DUMMY_END_CATEGORY) { //send error response errorResponse(ev, "Invalid category", STATS_INVALID_INPUT); return; } category = (SedaStats::sedaStatsCategory_t) iCategory; } // Check stat id if(statsReq->statsId().present()) { int iStatsId = statsReq->statsId().get(); if(iStatsId < 0 || iStatsId >= SedaStats::DUMMY_END_STAT) { errorResponse(ev, "Invalid stats", STATS_INVALID_INPUT); return; } statsId = (SedaStats::sedaStatsIdentifier_t)iStatsId; statsId_present = true; } // Check stat id string else if(statsReq->statsIdStr().present()) { statsIdStr = statsReq->statsIdStr().get(); statsIdStr_present = true; } bool success; std::vector<basicStats> vStats; //Dump stats for category/stats, no matter category is enabled or not if(statsId_present) success = _dumpStats(category, SedaStats::StatsId(statsId), vStats); else if(statsIdStr_present) success = _dumpStats(category, SedaStats::StatsId(statsIdStr), vStats); else success = _dumpStats(category, SedaStats::StatsId(), vStats); if(!success) { errorResponse(ev, "Category/stats not found", STATS_CATEGORY_NOT_FOUND); return; } int errcode = MAUI_SUCCESS; std::string errmsg = "success"; bool exception = false; int categoryCount = categoryMap.size(); //Create a response which indicates if the category is enabled CollectStatsResponse* statsResp = new CollectStatsResponse(errcode, errmsg, exception, categoryCount, externalCategoryEnableMap[category]); ASSERT(statsResp, "Could not create stats resp"); // check to see which component version is currently running AtmosUpgradeMgr* upgradeMgr = AtmosUpgradeMgr::getInstance(); bool includeIncrementStats = false; if ((upgradeMgr) && (upgradeMgr->checkUpgradeItem(AtmosUpgradeMgr::SEDA_STATS_COUNTER_INFO))) includeIncrementStats = true; for(std::vector<basicStats>::iterator iter = vStats.begin(); iter != vStats.end(); ++iter) { // filter out new counter stat fields as needed if (false == includeIncrementStats) { if (iter->avgIncrementVal().present()) iter->avgIncrementVal().reset(); if (iter->minIncrementVal().present()) iter->minIncrementVal().reset(); if (iter->maxIncrementVal().present()) iter->maxIncrementVal().reset(); } statsResp->basicStats().push_back(*iter); } mev->setResponse(statsResp); mev->done(); #endif return; }