X-Git-Url: http://plrg.eecs.uci.edu/git/?p=libcds.git;a=blobdiff_plain;f=test%2Fstress%2Fsequential%2Fsequential-set%2Fiteration%2Fset_iteration.h;h=6f47b39d4ae1e8cd175ab7938fd5410ad3b0bd3d;hp=2be247d3349d562b4867ca9eba1059c25294b18b;hb=9ce83fe3ccd0b149562f72b9a3c7de9c6ff6f0cc;hpb=59cb651402874a22500cab3ec586565b48f76059 diff --git a/test/stress/sequential/sequential-set/iteration/set_iteration.h b/test/stress/sequential/sequential-set/iteration/set_iteration.h index 2be247d3..6f47b39d 100644 --- a/test/stress/sequential/sequential-set/iteration/set_iteration.h +++ b/test/stress/sequential/sequential-set/iteration/set_iteration.h @@ -133,28 +133,15 @@ namespace set { size_t const nSetSize = fixture.s_nSetSize; size_t const nPassCount = fixture.s_nThreadPassCount; - if ( id() & 1 ) { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) { - if ( rSet.insert( keyval_type( m_arrString[nItem % nArrSize], nItem * 8 ))) - ++m_nInsertSuccess; - else - ++m_nInsertFailed; - } - } + for (size_t nPass = 0; nPass < nPassCount; ++nPass) { + for (size_t nItem = 0; nItem < nSetSize; ++nItem) { + if (rSet.insert(keyval_type(m_arrString[nItem % nArrSize], + nItem * 8))) + ++m_nInsertSuccess; + else + ++m_nInsertFailed; + } } - else { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = nSetSize; nItem > 0; --nItem ) { - if ( rSet.insert( keyval_type( m_arrString[nItem % nArrSize], nItem * 8 ))) - ++m_nInsertSuccess; - else - ++m_nInsertFailed; - } - } - } - - fixture.on_modifier_done(); } }; @@ -193,28 +180,14 @@ namespace set { size_t const nSetSize = fixture.s_nSetSize; size_t const nPassCount = fixture.s_nThreadPassCount; - if ( id() & 1 ) { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) { - if ( rSet.erase( m_arrString[nItem % nArrSize] )) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; - } - } + for (size_t nPass = 0; nPass < nPassCount; ++nPass) { + for (size_t nItem = 0; nItem < nSetSize; ++nItem) { + if (rSet.erase(m_arrString[nItem % nArrSize])) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + } } - else { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = nSetSize; nItem > 0; --nItem ) { - if ( rSet.erase( m_arrString[nItem % nArrSize] )) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; - } - } - } - - fixture.on_modifier_done(); } }; @@ -255,32 +228,16 @@ namespace set { size_t const nSetSize = fixture.s_nSetSize; size_t const nPassCount = fixture.s_nThreadPassCount; - if ( id() & 1 ) { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = 0; nItem < nSetSize; ++nItem ) { - gp = rSet.extract( m_arrString[nItem % nArrSize] ); - if ( gp ) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; - gp.release(); - } - } + for (size_t nPass = 0; nPass < nPassCount; ++nPass) { + for (size_t nItem = 0; nItem < nSetSize; ++nItem) { + gp = rSet.extract(m_arrString[nItem % nArrSize]); + if (gp) + ++m_nDeleteSuccess; + else + ++m_nDeleteFailed; + gp.release(); + } } - else { - for ( size_t nPass = 0; nPass < nPassCount; ++nPass ) { - for ( size_t nItem = nSetSize; nItem > 0; --nItem ) { - gp = rSet.extract( m_arrString[nItem % nArrSize] ); - if ( gp ) - ++m_nDeleteSuccess; - else - ++m_nDeleteFailed; - gp.release(); - } - } - } - - fixture.on_modifier_done(); } }; @@ -403,19 +360,16 @@ namespace set { Set& rSet = m_Set; Set_Iteration& fixture = pool().template fixture(); - while ( !fixture.all_modifiers_done()) { - ++m_nPassCount; - typename Set::iterator it; - typename Set::iterator itEnd; - itEnd = rSet.end(); - for ( it = rSet.begin(); it != itEnd; ++it ) { + typename Set::iterator it; + typename Set::iterator itEnd; + itEnd = rSet.end(); + for (it = rSet.begin(); it != itEnd; ++it) { #if CDS_BUILD_BITS == 64 - it->val.hash = CityHash64( it->key.c_str(), it->key.length()); + it->val.hash = CityHash64(it->key.c_str(), it->key.length()); #else - it->val.hash = std::hash()( it->key ); + it->val.hash = std::hash()(it->key); #endif - ++m_nVisitCount; - } + ++m_nVisitCount; } } }; @@ -453,19 +407,16 @@ namespace set { Set& rSet = m_Set; Set_Iteration& fixture = pool().template fixture(); - while ( !fixture.all_modifiers_done()) { - ++m_nPassCount; - typename Set::rcu_lock l; - for ( auto it = rSet.begin(); it != rSet.end(); ++it ) { + typename Set::rcu_lock l; + for (auto it = rSet.begin(); it != rSet.end(); ++it) { #if CDS_BUILD_BITS == 64 - it->val.hash = CityHash64( it->key.c_str(), it->key.length()); + it->val.hash = CityHash64(it->key.c_str(), it->key.length()); #else - it->val.hash = std::hash()(it->key); + it->val.hash = std::hash()(it->key); #endif - ++m_nVisitCount; - } + ++m_nVisitCount; } - } + } }; protected: @@ -552,87 +503,25 @@ namespace set { typedef Extractor ExtractThread; typedef Iterator IteratorThread; - size_t const nDelThreadCount = s_nDeleteThreadCount / 2; - size_t const nExtractThreadCount = s_nDeleteThreadCount - nDelThreadCount; - cds_test::thread_pool& pool = get_pool(); - pool.add( new InserterThread( pool, testSet ), s_nInsertThreadCount ); - pool.add( new DeleterThread( pool, testSet ), nDelThreadCount ); - pool.add( new ExtractThread( pool, testSet ), nExtractThreadCount ); - m_nModifierCount.store( pool.size(), atomics::memory_order_relaxed ); - pool.add( new IteratorThread( pool, testSet ), 1 ); - - propout() << std::make_pair( "insert_thread_count", s_nInsertThreadCount ) - << std::make_pair( "delete_thread_count", nDelThreadCount ) - << std::make_pair( "extract_thread_count", nExtractThreadCount ) - << std::make_pair( "thread_pass_count", s_nThreadPassCount ) - << std::make_pair( "set_size", s_nSetSize ); - - std::chrono::milliseconds duration = pool.run(); - - propout() << std::make_pair( "duration", duration ); - - size_t nInsertSuccess = 0; - size_t nInsertFailed = 0; - size_t nDeleteSuccess = 0; - size_t nDeleteFailed = 0; - size_t nExtractSuccess = 0; - size_t nExtractFailed = 0; - size_t nIteratorPassCount = 0; - size_t nIteratorVisitCount = 0; - for ( size_t i = 0; i < pool.size(); ++i ) { - cds_test::thread& thr = pool.get( i ); - switch ( thr.type()) { - case insert_thread: - { - InserterThread& inserter = static_cast(thr); - nInsertSuccess += inserter.m_nInsertSuccess; - nInsertFailed += inserter.m_nInsertFailed; - } - break; - case delete_thread: - { - DeleterThread& deleter = static_cast(thr); - nDeleteSuccess += deleter.m_nDeleteSuccess; - nDeleteFailed += deleter.m_nDeleteFailed; - } - break; - case extract_thread: - { - ExtractThread& extractor = static_cast(thr); - nExtractSuccess += extractor.m_nDeleteSuccess; - nExtractFailed += extractor.m_nDeleteFailed; - } - break; - case iterator_thread: - { - IteratorThread& iter = static_cast(thr); - nIteratorPassCount += iter.m_nPassCount; - nIteratorVisitCount += iter.m_nVisitCount; - } - break; - default: - assert( false ); // Forgot anything?.. - } - } - - propout() - << std::make_pair( "insert_success", nInsertSuccess ) - << std::make_pair( "delete_success", nDeleteSuccess ) - << std::make_pair( "extract_success", nExtractSuccess ) - << std::make_pair( "insert_failed", nInsertFailed ) - << std::make_pair( "delete_failed", nDeleteFailed ) - << std::make_pair( "extract_failed", nExtractFailed ) - << std::make_pair( "iterator_pass_count", nIteratorPassCount ) - << std::make_pair( "iterator_visit_count", nIteratorVisitCount ) - << std::make_pair( "final_set_size", testSet.size()); + std::unique_ptr inserter( + new InserterThread(pool, testSet)); + std::unique_ptr deleter( + new DeleterThread(pool, testSet)); + std::unique_ptr extractor( + new ExtractThread(pool, testSet)); + std::unique_ptr iterator( + new IteratorThread(pool, testSet)); + + inserter->test(); + iterator->test(); + deleter->test(); + iterator->test(); + extractor->test(); + iterator->test(); testSet.clear(); - EXPECT_TRUE( testSet.empty()); - - additional_check( testSet ); - print_stat( propout(), testSet ); additional_cleanup( testSet ); }