X-Git-Url: http://plrg.eecs.uci.edu/git/?p=junction.git;a=blobdiff_plain;f=test%2Fjunction_driver.cpp;h=3ac134b62f445725b2373eafe22b28cc73ab53dc;hp=68ef214b01cc69894b586ab21db437cc69e3038a;hb=ae91f5184f587d5afdf94d95b57d2a90a30ff5bf;hpb=fbd41a64f9cf3759b0c8b1ed8c890f53848184bb;ds=sidebyside diff --git a/test/junction_driver.cpp b/test/junction_driver.cpp index 68ef214..3ac134b 100644 --- a/test/junction_driver.cpp +++ b/test/junction_driver.cpp @@ -11,22 +11,26 @@ namespace { const unsigned s_nInsertPercentage = 10; const char* kTestName = "InsDelFind"; +// Run GC after "kGCFrequency" operations. +const size_t kGCFrequency = 3000; +const size_t kLeapfrogGCFrequency = 1500; + +const size_t kCrudeMapSize = 10000; +const size_t kCrudePassCount = 400000; +const char* kCrudeBenchmarkName = "JunctionMapCrude"; + const size_t kGrampaMapSize = 20000; const size_t kGrampaPassCount = 30000; const char* kGrampaBenchmarkName = "JunctionMapGrampa"; -const size_t kLinearMapSize = 25000; -const size_t kLinearPassCount = 30000; +const size_t kLinearMapSize = 20000; +const size_t kLinearPassCount = 70000; const char* kLinearBenchmarkName = "JunctionMapLinear"; -const size_t kLeapfrogMapSize = 25000; -const size_t kLeapfrogPassCount = 30000; +const size_t kLeapfrogMapSize = 20000; +const size_t kLeapfrogPassCount = 75000; const char* kLeapfrogBenchmarkName = "JunctionMapLeapfrog"; -const size_t kCrudeMapSize = 10000; -const size_t kCrudePassCount = 120000; -const char* kCrudeBenchmarkName = "JunctionMapCrude"; - } // namespace typedef junction::ConcurrentMap_Grampa GrampaMap; @@ -35,12 +39,14 @@ typedef junction::ConcurrentMap_Leapfrog LeapfrogMap; typedef junction::ConcurrentMap_Crude CrudeMap; template -void run_crude_map(size_t map_size, size_t pass_count, const char* bench_name) { +void run_crude_map(size_t map_size, size_t pass_count, const char* bench_name, + size_t gc_frequency) { std::cout << "[ RUN ] " << kTestName << "." << bench_name << "\n"; auto start_time = std::chrono::system_clock::now(); size_t nInsertedNum = 0; size_t nFindSuccess = 0; + size_t nOperations = 0; // Seems like the crude map won't resize, so better have a large enough // capacity. std::unique_ptr map(new Map(map_size * 32)); @@ -69,9 +75,14 @@ void run_crude_map(size_t map_size, size_t pass_count, const char* bench_name) { // std::cout << "Erased" << i << "\n"; } } - junction::DefaultQSBR.update(qsbrContext); + if (++nOperations > gc_frequency) { + junction::DefaultQSBR.update(qsbrContext); + nOperations = 0; + } } } + junction::DefaultQSBR.update(qsbrContext); + junction::DefaultQSBR.destroyContext(qsbrContext ); auto finish_time = std::chrono::system_clock::now(); auto dur = finish_time - start_time; auto milisecs = std::chrono::duration_cast(dur); @@ -89,12 +100,14 @@ void run_crude_map(size_t map_size, size_t pass_count, const char* bench_name) { } template -void run_test(size_t map_size, size_t pass_count, const char* bench_name) { +void run_test(size_t map_size, size_t pass_count, const char* bench_name, + size_t gc_frequency) { std::cout << "[ RUN ] " << kTestName << "." << bench_name << "\n"; auto start_time = std::chrono::system_clock::now(); size_t nInsertedNum = 0; size_t nFindSuccess = 0; + size_t nOperations = 0; std::unique_ptr map(new Map()); auto qsbrContext = junction::DefaultQSBR.createContext(); for (size_t count = 0; count < pass_count; count++) { @@ -126,9 +139,14 @@ void run_test(size_t map_size, size_t pass_count, const char* bench_name) { // std::cout << "Erased" << i << "\n"; } } - junction::DefaultQSBR.update(qsbrContext); + if (++nOperations > gc_frequency) { + junction::DefaultQSBR.update(qsbrContext); + nOperations = 0; + } } } + junction::DefaultQSBR.update(qsbrContext); + junction::DefaultQSBR.destroyContext(qsbrContext ); auto finish_time = std::chrono::system_clock::now(); auto dur = finish_time - start_time; auto milisecs = std::chrono::duration_cast(dur); @@ -146,9 +164,13 @@ void run_test(size_t map_size, size_t pass_count, const char* bench_name) { } int main() { - run_crude_map(kCrudeMapSize, kCrudePassCount, kCrudeBenchmarkName); - run_test(kLeapfrogMapSize, kLeapfrogPassCount, kLeapfrogBenchmarkName); - run_test(kLinearMapSize, kLinearPassCount, kLinearBenchmarkName); - run_test(kGrampaMapSize, kGrampaPassCount, kGrampaBenchmarkName); + run_crude_map(kCrudeMapSize, kCrudePassCount, kCrudeBenchmarkName, + kGCFrequency); + run_test(kLeapfrogMapSize, kLeapfrogPassCount, + kLeapfrogBenchmarkName, kLeapfrogGCFrequency ); + run_test(kLinearMapSize, kLinearPassCount, kLinearBenchmarkName, + kGCFrequency); + run_test(kGrampaMapSize, kGrampaPassCount, kGrampaBenchmarkName, + kGCFrequency); return 0; }