From e360657e258514a73ab99af0bd726c21d05156fc Mon Sep 17 00:00:00 2001 From: Peizhao Ou Date: Wed, 17 Jan 2018 17:00:12 -0800 Subject: [PATCH] Adjusts sequential map test cases --- .../sequential-map/insdelfind/CMakeLists.txt | 6 +- .../insdelfind/map_insdelfind.cpp | 46 +++++++- .../insdelfind/map_insdelfind.h | 104 ++++++++++-------- .../map_insdelfind_bronsonavltree.cpp | 2 +- .../map_insdelfind_ellentree_hp.cpp | 2 +- .../map_insdelfind_ellentree_rcu.cpp | 2 +- .../map_insdelfind_feldman_hashset_hp.cpp | 2 +- .../map_insdelfind_feldman_hashset_rcu.cpp | 2 +- .../insdelfind/map_insdelfind_michael_hp.cpp | 2 +- .../insdelfind/map_insdelfind_michael_rcu.cpp | 2 +- .../insdelfind/map_insdelfind_skip_hp.cpp | 2 +- .../insdelfind/map_insdelfind_skip_rcu.cpp | 2 +- .../insdelfind/map_insdelfind_split_hp.cpp | 4 +- .../insdelfind/map_insdelfind_split_rcu.cpp | 2 +- 14 files changed, 116 insertions(+), 64 deletions(-) diff --git a/test/stress/sequential/sequential-map/insdelfind/CMakeLists.txt b/test/stress/sequential/sequential-map/insdelfind/CMakeLists.txt index 81760788..033bec64 100644 --- a/test/stress/sequential/sequential-map/insdelfind/CMakeLists.txt +++ b/test/stress/sequential/sequential-map/insdelfind/CMakeLists.txt @@ -4,14 +4,14 @@ set(MAP_INSDELFIND_RCU stress-sequential-map-insdelfind-rcu) set(CDSSTRESS_MAP_INSDELFIND_HP_SOURCES ../../../main.cpp map_insdelfind.cpp - map_insdelfind_cuckoo.cpp + #map_insdelfind_cuckoo.cpp map_insdelfind_ellentree_hp.cpp map_insdelfind_feldman_hashset_hp.cpp map_insdelfind_michael_hp.cpp map_insdelfind_skip_hp.cpp map_insdelfind_split_hp.cpp - map_insdelfind_std.cpp - map_insdelfind_striped.cpp + #map_insdelfind_std.cpp + #map_insdelfind_striped.cpp ) set(CDSSTRESS_MAP_INSDELFIND_RCU_SOURCES diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.cpp index ea0c9704..63fe8762 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.cpp @@ -34,6 +34,15 @@ namespace map { size_t Map_InsDelFind::s_nMapSize = 500000; size_t Map_InsDelFind::s_nThreadCount = 8; + + size_t Map_InsDelFind::s_nPassCount = 100; + size_t Map_InsDelFind::s_nFeldmanPassCount = 100; + size_t Map_InsDelFind::s_nBronsonAVLTreeMapPassCount = 100; + size_t Map_InsDelFind::s_nEllenBinTreeMapPassCount = 100; + size_t Map_InsDelFind::s_nMichaelMapPassCount = 100; + size_t Map_InsDelFind::s_nSkipListMapPassCount = 100; + size_t Map_InsDelFind::s_nSplitListMapPassCount = 100; + size_t Map_InsDelFind::s_nMaxLoadFactor = 8; unsigned int Map_InsDelFind::s_nInsertPercentage = 5; unsigned int Map_InsDelFind::s_nDeletePercentage = 5; @@ -52,7 +61,7 @@ namespace map { void Map_InsDelFind::SetUpTestCase() { - cds_test::config const& cfg = get_config( "map_insdelfind" ); + cds_test::config const& cfg = get_config( "sequential_real_map_insdelfind" ); s_nMapSize = cfg.get_size_t( "InitialMapSize", s_nMapSize ); if ( s_nMapSize < 1000 ) @@ -62,6 +71,41 @@ namespace map { if ( s_nThreadCount == 0 ) s_nThreadCount = std::min( 16u, std::thread::hardware_concurrency() * 2 ); + s_nPassCount = + cfg.get_size_t("PassCount", s_nPassCount); + if (s_nPassCount == 0) + s_nPassCount = 500; + + s_nFeldmanPassCount = + cfg.get_size_t("FeldmanPassCount", s_nFeldmanPassCount); + if (s_nFeldmanPassCount == 0) + s_nFeldmanPassCount = 500; + + s_nBronsonAVLTreeMapPassCount = cfg.get_size_t( + "BronsonAVLTreeMapPassCount", s_nBronsonAVLTreeMapPassCount); + if (s_nBronsonAVLTreeMapPassCount == 0) + s_nBronsonAVLTreeMapPassCount = 500; + + s_nEllenBinTreeMapPassCount = cfg.get_size_t( + "EllenBinTreeMapPassCount", s_nEllenBinTreeMapPassCount); + if (s_nEllenBinTreeMapPassCount == 0) + s_nEllenBinTreeMapPassCount = 500; + + s_nMichaelMapPassCount = + cfg.get_size_t("MichaelMapPassCount", s_nMichaelMapPassCount); + if (s_nMichaelMapPassCount == 0) + s_nMichaelMapPassCount = 500; + + s_nSkipListMapPassCount = + cfg.get_size_t("SkipListMapPassCount", s_nSkipListMapPassCount); + if (s_nSkipListMapPassCount == 0) + s_nSkipListMapPassCount = 500; + + s_nSplitListMapPassCount = + cfg.get_size_t("SplitListMapPassCount", s_nSplitListMapPassCount); + if (s_nSplitListMapPassCount == 0) + s_nSplitListMapPassCount = 500; + s_nMaxLoadFactor = cfg.get_size_t( "MaxLoadFactor", s_nMaxLoadFactor ); if ( s_nMaxLoadFactor == 0 ) s_nMaxLoadFactor = 1; diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.h b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.h index dd909dc9..f1b03bf8 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.h +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind.h @@ -37,6 +37,15 @@ namespace map { { public: static size_t s_nMapSize; // initial map size + + static size_t s_nPassCount; + static size_t s_nBronsonAVLTreeMapPassCount; + static size_t s_nEllenBinTreeMapPassCount; + static size_t s_nFeldmanPassCount; + static size_t s_nMichaelMapPassCount; + static size_t s_nSkipListMapPassCount; + static size_t s_nSplitListMapPassCount; + static size_t s_nThreadCount; // thread count static size_t s_nMaxLoadFactor; // maximum load factor static unsigned int s_nInsertPercentage; @@ -122,12 +131,14 @@ namespace map { virtual void test() { Map& rMap = m_Map; + Map_InsDelFind& fixture = pool().template fixture(); + size_t pass_count = fixture.s_nPassCount; unsigned int i = 0; size_t const nNormalize = size_t(-1) / ( s_nMapSize * 2 ); size_t nRand = 0; - while ( !time_elapsed()) { + while ( pass_count-- ) { nRand = cds::bitop::RandXorShift( nRand ); size_t n = nRand / nNormalize; switch ( s_arrShuffle[i] ) { @@ -183,56 +194,11 @@ namespace map { } cds_test::thread_pool& pool = get_pool(); - pool.add( new worker( pool, testMap ), s_nThreadCount ); - - propout() << std::make_pair( "thread_count", s_nThreadCount ) - << std::make_pair( "insert_percentage", s_nInsertPercentage ) - << std::make_pair( "delete_percentage", s_nDeletePercentage ) - << std::make_pair( "map_size", s_nMapSize ); - - std::chrono::milliseconds duration = pool.run( std::chrono::seconds( s_nDuration )); - - propout() << std::make_pair( "duration", duration ); - - size_t nInsertSuccess = 0; - size_t nInsertFailed = 0; - size_t nDeleteSuccess = 0; - size_t nDeleteFailed = 0; - size_t nFindSuccess = 0; - size_t nFindFailed = 0; - for ( size_t i = 0; i < pool.size(); ++i ) { - worker& thr = static_cast( pool.get( i )); - - nInsertSuccess += thr.m_nInsertSuccess; - nInsertFailed += thr.m_nInsertFailed; - nDeleteSuccess += thr.m_nDeleteSuccess; - nDeleteFailed += thr.m_nDeleteFailed; - nFindSuccess += thr.m_nFindSuccess; - nFindFailed += thr.m_nFindFailed; - } - - propout() - << std::make_pair( "insert_success", nInsertSuccess ) - << std::make_pair( "insert_failed", nInsertFailed ) - << std::make_pair( "delete_success", nDeleteSuccess ) - << std::make_pair( "delete_failed", nDeleteFailed ) - << std::make_pair( "find_success", nFindSuccess ) - << std::make_pair( "find_failed", nFindFailed ) - << std::make_pair( "finish_map_size", testMap.size()); - - { - ASSERT_TRUE( std::chrono::duration_cast(duration).count() > 0 ); - size_t nTotalOps = nInsertSuccess + nInsertFailed + nDeleteSuccess + nDeleteFailed + nFindSuccess + nFindFailed; - propout() << std::make_pair( "avg_speed", nTotalOps / std::chrono::duration_cast( duration ).count()); - } - - check_before_cleanup( testMap ); + std::unique_ptr worker_thrd(new worker(pool, testMap)); + worker_thrd->test(); testMap.clear(); EXPECT_TRUE( testMap.empty()); - - additional_check( testMap ); - print_stat( propout(), testMap ); additional_cleanup( testMap ); } @@ -242,6 +208,34 @@ namespace map { Map testMap( *this ); do_test( testMap ); } + + template + void run_bronson_avl_tree() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nBronsonAVLTreeMapPassCount; + run_test(); + } + + template + void run_ellen_bin_tree() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nEllenBinTreeMapPassCount; + run_test(); + } + + template + void run_skip_list() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nSkipListMapPassCount; + run_test(); + } + + template + void run_feldman() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nFeldmanPassCount; + run_test(); + } }; class Map_InsDelFind_LF: public Map_InsDelFind @@ -256,6 +250,20 @@ namespace map { Map_InsDelFind::run_test(); } + template + void run_michael() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nMichaelMapPassCount; + Map_InsDelFind_LF::run_test(); + } + + template + void run_split_list() { + Map_InsDelFind::s_nPassCount = + Map_InsDelFind::s_nSplitListMapPassCount; + Map_InsDelFind_LF::run_test(); + } + static std::vector get_load_factors(); }; diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_bronsonavltree.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_bronsonavltree.cpp index 410e944c..68071541 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_bronsonavltree.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_bronsonavltree.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_BronsonAVLTreeMap( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_BronsonAVLTreeMap( Map_InsDelFind, run_bronson_avl_tree, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_hp.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_hp.cpp index d4c07ced..7372eee5 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_hp.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_hp.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_EllenBinTreeMap_HP( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_EllenBinTreeMap_HP( Map_InsDelFind, run_ellen_bin_tree, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_rcu.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_rcu.cpp index 844c28de..b5db47fe 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_rcu.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_ellentree_rcu.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_EllenBinTreeMap_RCU( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_EllenBinTreeMap_RCU( Map_InsDelFind, run_ellen_bin_tree, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_hp.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_hp.cpp index b0978587..dce3ebbe 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_hp.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_hp.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_FeldmanHashMap_fixed_HP( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_FeldmanHashMap_fixed_HP( Map_InsDelFind, run_feldman, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_rcu.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_rcu.cpp index 67c8821e..0122f166 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_rcu.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_feldman_hashset_rcu.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_FeldmanHashMap_fixed_RCU( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_FeldmanHashMap_fixed_RCU( Map_InsDelFind, run_feldman, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_hp.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_hp.cpp index afa4106d..4083ab6d 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_hp.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_hp.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_MichaelMap_HP( Map_InsDelFind_LF, run_test, size_t, size_t ) + CDSSTRESS_MichaelMap_HP( Map_InsDelFind_LF, run_michael, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_rcu.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_rcu.cpp index 3d441773..0874b0ab 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_rcu.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_michael_rcu.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_MichaelMap_RCU( Map_InsDelFind_LF, run_test, size_t, size_t ) + CDSSTRESS_MichaelMap_RCU( Map_InsDelFind_LF, run_michael, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_hp.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_hp.cpp index cbc76e36..a78c73f4 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_hp.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_hp.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_SkipListMap_HP( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_SkipListMap_HP( Map_InsDelFind, run_skip_list, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_rcu.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_rcu.cpp index f70c5ee5..d73fa79c 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_rcu.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_skip_rcu.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_SkipListMap_RCU( Map_InsDelFind, run_test, size_t, size_t ) + CDSSTRESS_SkipListMap_RCU( Map_InsDelFind, run_skip_list, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_hp.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_hp.cpp index ece864c7..625afca4 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_hp.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_hp.cpp @@ -33,7 +33,7 @@ namespace map { - CDSSTRESS_SplitListMap_HP( Map_InsDelFind_LF, run_test, size_t, size_t ) - CDSSTRESS_SplitListIterableMap( Map_InsDelFind_LF, run_test, size_t, size_t ) + CDSSTRESS_SplitListMap_HP( Map_InsDelFind_LF, run_split_list, size_t, size_t ) + CDSSTRESS_SplitListIterableMap( Map_InsDelFind_LF, run_split_list, size_t, size_t ) } // namespace map diff --git a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_rcu.cpp b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_rcu.cpp index a090fad7..bfa4da84 100644 --- a/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_rcu.cpp +++ b/test/stress/sequential/sequential-map/insdelfind/map_insdelfind_split_rcu.cpp @@ -33,6 +33,6 @@ namespace map { - CDSSTRESS_SplitListMap_RCU( Map_InsDelFind_LF, run_test, size_t, size_t ) + CDSSTRESS_SplitListMap_RCU( Map_InsDelFind_LF, run_split_list, size_t, size_t ) } // namespace map -- 2.34.1