int main(int argc, char** argv){ TTableContext Context; char filename[500] = "/dfs/ilfs2/0/ringo/benchmarks/soc-LiveJournal1.table"; if (argc >= 2){ strcpy(filename,argv[1]); } struct timeval start, end; float delta; TTmProfiler Profiler; int TimerId = Profiler.AddTimer("Profiler"); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); TFIn FIn(filename); PTable Q = TTable::Load(FIn, Context); Profiler.StopTimer(TimerId); gettimeofday(&end, NULL); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("Load time (elapsed): %f, cpu: %f\n", delta, Profiler.GetTimerSec(TimerId)); TVec<TPair<TStr, TAttrType> > Schema = Q->GetSchema(); Q->SetSrcCol(Schema[0].GetVal1()); Q->SetDstCol(Schema[1].GetVal1()); /*Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); PUNGraph G1 = Q->ToGraphUndirected(aaFirst); Profiler.StopTimer(TimerId); gettimeofday(&end, NULL); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("ToGraphUndirected time (elapsed): %f, cpu: %f\n", delta, Profiler.GetTimerSec(TimerId));*/ Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); PNGraph G2 = Q->ToGraphDirected(aaFirst); Profiler.StopTimer(TimerId); gettimeofday(&end, NULL); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("ToGraphDirected time (elapsed): %f, cpu: %f\n", delta, Profiler.GetTimerSec(TimerId)); /*Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); PNEANet G3 = Q->ToGraph(aaFirst); Profiler.StopTimer(TimerId); gettimeofday(&end, NULL); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("ToGraph time (elapsed): %f, cpu: %f\n", delta, Profiler.GetTimerSec(TimerId));*/ return 0; }
int64 CountTriangles2(const PNGraph &Graph) { struct timeval start, end; float delta; TTmProfiler Profiler; int TimerId = Profiler.AddTimer("Profiler"); const int NNodes = Graph->GetNodes(); TIntV MapV(NNodes); TVec<TNGraph::TNodeI> NV(NNodes); NV.Reduce(0); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); int MxId = -1; int ind = 0; for (TNGraph::TNodeI NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) { NV.Add(NI); int Id = NI.GetId(); if (Id > MxId) { MxId = Id; } MapV[ind] = Id; ind++; } TIntV IndV(MxId+1); for (int j = 0; j < NNodes; j++) { IndV[MapV[j]] = j; } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__nodemap__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); ind = MapV.Len(); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); TVec<TIntV> HigherDegNbrV(ind); for (int i = 0; i < ind; i++) { HigherDegNbrV[i] = TVec<TInt>(); HigherDegNbrV[i].Reserve(NV[i].GetDeg()); HigherDegNbrV[i].Reduce(0); } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__valloc__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); #pragma omp parallel for schedule(dynamic) for (TInt i = 0; i < ind; i++) { TNGraph::TNodeI NI = NV[i]; //HigherDegNbrV[i] = TVec<TInt>(); //HigherDegNbrV[i].Reserve(NI.GetDeg()); //HigherDegNbrV[i].Reduce(0); GetMergeSortedV(HigherDegNbrV[i], NI); int k = 0; for (TInt j = 0; j < HigherDegNbrV[i].Len(); j++) { TInt Vert = HigherDegNbrV[i][j]; TInt Deg = NV[IndV[Vert]].GetDeg(); if (Deg > NI.GetDeg() || (Deg == NI.GetDeg() && Vert > NI.GetId())) { HigherDegNbrV[i][k] = Vert; k++; } } HigherDegNbrV[i].Reduce(k); } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__sort__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); int64 cnt = 0; #pragma omp parallel for schedule(dynamic) reduction(+:cnt) for (TInt i = 0; i < HigherDegNbrV.Len(); i++) { for (TInt j = 0; j < HigherDegNbrV[i].Len(); j++) { //TInt NbrInd = H.GetDat(HigherDegNbrV[i][j]); TInt NbrInd = IndV[HigherDegNbrV[i][j]]; int64 num = GetCommon(HigherDegNbrV[i], HigherDegNbrV[NbrInd]); cnt += num; } } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__count__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); return cnt; }
// Rok #13 //template<class PGraph> int64 CountTriangles1(const TVec<TNGraph::TNodeI,int>& NV, const TIntV& IndV, const TIntV& MapV) { struct timeval start, end; float delta; TTmProfiler Profiler; int TimerId = Profiler.AddTimer("Profiler"); int ind = MapV.Len(); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); TVec<TIntV> HigherDegNbrV(ind); for (int i = 0; i < ind; i++) { HigherDegNbrV[i] = TVec<TInt>(); HigherDegNbrV[i].Reserve(NV[i].GetDeg()); HigherDegNbrV[i].Reduce(0); } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__valloc__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); #pragma omp parallel for schedule(dynamic) for (TInt i = 0; i < ind; i++) { TNGraph::TNodeI NI = NV[i]; //HigherDegNbrV[i] = TVec<TInt>(); //HigherDegNbrV[i].Reserve(NI.GetDeg()); //HigherDegNbrV[i].Reduce(0); GetMergeSortedV(HigherDegNbrV[i], NI); int k = 0; for (TInt j = 0; j < HigherDegNbrV[i].Len(); j++) { TInt Vert = HigherDegNbrV[i][j]; TInt Deg = NV[IndV[Vert]].GetDeg(); if (Deg > NI.GetDeg() || (Deg == NI.GetDeg() && Vert > NI.GetId())) { HigherDegNbrV[i][k] = Vert; k++; } } HigherDegNbrV[i].Reduce(k); } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__sort__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); Profiler.ResetTimer(TimerId); Profiler.StartTimer(TimerId); gettimeofday(&start, NULL); int64 cnt = 0; #pragma omp parallel for schedule(dynamic) reduction(+:cnt) for (TInt i = 0; i < HigherDegNbrV.Len(); i++) { for (TInt j = 0; j < HigherDegNbrV[i].Len(); j++) { //TInt NbrInd = H.GetDat(HigherDegNbrV[i][j]); TInt NbrInd = IndV[HigherDegNbrV[i][j]]; int64 num = GetCommon(HigherDegNbrV[i], HigherDegNbrV[NbrInd]); cnt += num; } } gettimeofday(&end, NULL); Profiler.StopTimer(TimerId); delta = ((end.tv_sec - start.tv_sec) * 1000000u + end.tv_usec - start.tv_usec) / 1.e6; printf("__count__\ttime %7.3f\tcpu %8.3f\n", delta, Profiler.GetTimerSec(TimerId)); return cnt; }