コード例 #1
0
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;
}
コード例 #2
0
ファイル: sedastatsstage.cpp プロジェクト: longdafeng/longda
//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;
}