// histo for compare diff dependence of number of threads #include #include #include const int NCoresPerNode = 32; // max number of threads set to run const int NNodes = 98; const int NCores = NCoresPerNode*NNodes; TString inputFileName[NNodes]; TString outputFile; const int MaxSpeed = 250; void manyNodesScalability() { TH1F *hScalability = new TH1F("Scalability","Scalability",NCores+1,-0.5,NCores+0.5); float speed[NCores] = {0.f}; for(int iNode=1; iNode<=NNodes; iNode++) { inputFileName[iNode] = ""; if(iNode < 10) inputFileName[iNode] += "0"; if(iNode < 100) inputFileName[iNode] += "0"; if(iNode < 1000) inputFileName[iNode] += "0"; if(iNode < 10000) inputFileName[iNode] += "0"; inputFileName[iNode] += iNode; inputFileName[iNode] += "/make_tbbtime_0.txt"; cout << " Read data from file " << inputFileName[iNode] << endl; ifstream iff(inputFileName[iNode]); int iThread; float prepTime,trCpuTime,trRealTime,allCpuTime,allRealTime; string tmpStr; for (int i=0; (i < NCoresPerNode) && (!iff.eof()); i++){ iff >> iThread; iff >> tmpStr >> tmpStr >> tmpStr; // Estimated CATime = iff >> allRealTime; iff >> tmpStr >> tmpStr >> tmpStr; // Estimated CATime/nEvents = iff >> trRealTime; float TrPerus = 1./trRealTime; // std::cout << iThread << " " << allRealTime << " " << trRealTime << std::endl; if ( iThread != i+1 ) return; speed[i + (iNode-1)*NCoresPerNode] += TrPerus; } for(int iCore=iNode*NCoresPerNode; iCoreSetBinContent(iCore+1,speed[iCore]/1000); // events/ ms hScalability->SetBinError(iCore+1,0.00001); } cout << "MaxSpeed = " << speed[NCores-1] << endl; cout << "Speed Up = " << speed[NCores-1]/speed[0] << endl; gStyle->SetCanvasColor(10); gStyle->SetFrameFillColor(10); gStyle->SetTitleColor(0); gStyle->SetHistFillColor(0); gStyle->SetOptStat(00000000); gStyle->SetPadGridX(1); gStyle->SetPadGridY(1); gStyle->SetOptTitle(0); gStyle->SetTextFont(22); TCanvas *c1 = new TCanvas("Scalability", "Scalability", 700, 700); hScalability->SetLineColor(0); hScalability->SetLineWidth(0); hScalability->SetMarkerStyle(22); hScalability->SetMarkerSize(1.5); hScalability->SetMarkerColor(TColor::GetColorDark(kRed)); const TAxis *xAxis = hScalability->GetXaxis(); const TAxis *yAxis = hScalability->GetYaxis(); yAxis->SetTitleFont(22); xAxis->SetTitleFont(22); yAxis->SetLabelFont(22); xAxis->SetLabelFont(22); xAxis->SetTitle("Number of Cores"); yAxis->SetTitle("10^{3} Events / s"); yAxis->SetTitleOffset(1.4); yAxis->SetRangeUser(0,MaxSpeed); hScalability->Draw(); TGaxis *axisNodes = new TGaxis(0, MaxSpeed, NCoresPerNode*NNodes, MaxSpeed, 0, NNodes, 510,"-"); axisNodes->SetTitle("Number of Nodes"); axisNodes->SetTitleColor(kBlack); axisNodes->SetTitleOffset(xAxis->GetTitleOffset()*1.2); axisNodes->SetLabelFont(xAxis->GetLabelFont()); axisNodes->SetLabelSize(xAxis->GetLabelSize()); axisNodes->SetTitleFont(xAxis->GetTitleFont()); axisNodes->SetTitleSize(xAxis->GetTitleSize()); axisNodes->Draw(); TLegend *leg1 = new TLegend(0.12,.72,0.72,.79); leg1->SetFillColor(0); leg1->SetLineWidth(0); leg1->SetBorderSize(0); leg1->SetTextFont(22); leg1->AddEntry( hScalability,"AMD Opteron 6272, 2.1 GHz" ); leg1->Draw(); TString FileNameSave; FileNameSave = "Scalability.pdf"; c1->SaveAs(FileNameSave.Data()); }