mt_allocator.h (__mt_alloc<>::allocate): Factor out some duplicated code.
2004-04-03 Paolo Carlini <pcarlini@suse.de> * include/ext/mt_allocator.h (__mt_alloc<>::allocate): Factor out some duplicated code. (__mt_alloc<>::_Bin_record): Spare the space of _M_free and _M_used in the single threaded case. * testsuite/performance/20_util/allocator/list_sort_search.cc: Reorder and renumber the tests consistently with the other testfiles. * testsuite/performance/20_util/allocator/map_mt_find.cc: Ditto. * testsuite/performance/20_util/allocator/map_thread.cc: Ditto. * testsuite/performance/20_util/allocator/producer_consumer.cc: Ditto. From-SVN: r80375
This commit is contained in:
parent
a0eabb87e1
commit
c8333c0fd5
@ -1,3 +1,15 @@
|
||||
2004-04-03 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/ext/mt_allocator.h (__mt_alloc<>::allocate): Factor out
|
||||
some duplicated code.
|
||||
(__mt_alloc<>::_Bin_record): Spare the space of _M_free and _M_used
|
||||
in the single threaded case.
|
||||
* testsuite/performance/20_util/allocator/list_sort_search.cc:
|
||||
Reorder and renumber the tests consistently with the other testfiles.
|
||||
* testsuite/performance/20_util/allocator/map_mt_find.cc: Ditto.
|
||||
* testsuite/performance/20_util/allocator/map_thread.cc: Ditto.
|
||||
* testsuite/performance/20_util/allocator/producer_consumer.cc: Ditto.
|
||||
|
||||
2004-04-02 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/ext/mt_allocator.h (__mt_alloc<>::deallocate):
|
||||
|
@ -228,8 +228,8 @@ namespace __gnu_cxx
|
||||
// Points to the block_record of the next free block.
|
||||
_Block_record* volatile _M_next;
|
||||
|
||||
// The thread id of the thread which has requested this block.
|
||||
#ifdef __GTHREADS
|
||||
// The thread id of the thread which has requested this block.
|
||||
size_t _M_thread_id;
|
||||
#endif
|
||||
};
|
||||
@ -241,6 +241,7 @@ namespace __gnu_cxx
|
||||
// for _S_max_threads + global pool 0.
|
||||
_Block_record** volatile _M_first;
|
||||
|
||||
#ifdef __GTHREADS
|
||||
// An "array" of counters used to keep track of the amount of
|
||||
// blocks that are on the freelist/used for each thread id.
|
||||
// Memory to these "arrays" is allocated in _S_initialize() for
|
||||
@ -251,7 +252,6 @@ namespace __gnu_cxx
|
||||
// Each bin has its own mutex which is used to ensure data
|
||||
// integrity while changing "ownership" on a block. The mutex
|
||||
// is initialized in _S_initialize().
|
||||
#ifdef __GTHREADS
|
||||
__gthread_mutex_t* _M_mutex;
|
||||
#endif
|
||||
};
|
||||
@ -359,14 +359,6 @@ namespace __gnu_cxx
|
||||
}
|
||||
__gthread_mutex_unlock(__bin._M_mutex);
|
||||
}
|
||||
|
||||
// Return the first newly added block in our list and
|
||||
// update the counters
|
||||
__block = __bin._M_first[__thread_id];
|
||||
__bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
|
||||
__block->_M_thread_id = __thread_id;
|
||||
--__bin._M_free[__thread_id];
|
||||
++__bin._M_used[__thread_id];
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -384,28 +376,20 @@ namespace __gnu_cxx
|
||||
--__block_count;
|
||||
}
|
||||
__block->_M_next = NULL;
|
||||
|
||||
// Remove from list.
|
||||
__block = __bin._M_first[0];
|
||||
__bin._M_first[0] = __bin._M_first[0]->_M_next;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// "Default" operation - we have blocks on our own freelist
|
||||
// grab the first record and update the counters.
|
||||
__block = __bin._M_first[__thread_id];
|
||||
__bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
|
||||
|
||||
__block = __bin._M_first[__thread_id];
|
||||
__bin._M_first[__thread_id] = __bin._M_first[__thread_id]->_M_next;
|
||||
#ifdef __GTHREADS
|
||||
if (__gthread_active_p())
|
||||
{
|
||||
__block->_M_thread_id = __thread_id;
|
||||
--__bin._M_free[__thread_id];
|
||||
++__bin._M_used[__thread_id];
|
||||
}
|
||||
#endif
|
||||
if (__gthread_active_p())
|
||||
{
|
||||
__block->_M_thread_id = __thread_id;
|
||||
--__bin._M_free[__thread_id];
|
||||
++__bin._M_used[__thread_id];
|
||||
}
|
||||
#endif
|
||||
|
||||
char* __c = reinterpret_cast<char*>(__block) + sizeof(_Block_record);
|
||||
return static_cast<_Tp*>(static_cast<void*>(__c));
|
||||
}
|
||||
|
@ -116,10 +116,10 @@ int main ()
|
||||
do_test<malloc_allocator<int> >();
|
||||
#endif
|
||||
#ifdef TEST_S2
|
||||
do_test<bitmap_allocator<int> >();
|
||||
do_test<__mt_alloc<int> >();
|
||||
#endif
|
||||
#ifdef TEST_S3
|
||||
do_test<__mt_alloc<int> >();
|
||||
do_test<bitmap_allocator<int> >();
|
||||
#endif
|
||||
#ifdef TEST_S4
|
||||
do_test<__pool_alloc<int> >();
|
||||
|
@ -142,10 +142,10 @@ int main()
|
||||
exec_tests<malloc_allocator<int> >();
|
||||
#endif
|
||||
#ifdef TEST_T2
|
||||
exec_tests<bitmap_allocator<int> >();
|
||||
exec_tests<__mt_alloc<int> >();
|
||||
#endif
|
||||
#ifdef TEST_T3
|
||||
exec_tests<__mt_alloc<int> >();
|
||||
exec_tests<bitmap_allocator<int> >();
|
||||
#endif
|
||||
#ifdef TEST_T4
|
||||
exec_tests<__pool_alloc<int> >();
|
||||
|
@ -111,23 +111,23 @@ template<typename Container>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef TEST_T1
|
||||
#ifdef TEST_T0
|
||||
test_container(map<int, int>());
|
||||
#endif
|
||||
#ifdef TEST_T2
|
||||
#ifdef TEST_T1
|
||||
test_container(map<int, int, less<const int>, new_allocator<int> >());
|
||||
#endif
|
||||
#ifdef TEST_T3
|
||||
#ifdef TEST_T2
|
||||
test_container(map<int, int, less<const int>, malloc_allocator<int> >());
|
||||
#endif
|
||||
#ifdef TEST_T4
|
||||
#ifdef TEST_T3
|
||||
test_container(map<int, int, less<const int>,
|
||||
__mt_alloc< pair<const int, int> > >());
|
||||
#endif
|
||||
#ifdef TEST_T5
|
||||
#ifdef TEST_T4
|
||||
test_container(map<int, int, less<const int>, bitmap_allocator<int> >());
|
||||
#endif
|
||||
#ifdef TEST_T6
|
||||
#ifdef TEST_T5
|
||||
test_container(map<int, int, less<const int>, __pool_alloc<int> >());
|
||||
#endif
|
||||
return 0;
|
||||
|
@ -290,51 +290,51 @@ template<typename Container>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
#ifdef TEST_T1
|
||||
#ifdef TEST_T0
|
||||
test_container(vector<test_type, malloc_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T2
|
||||
#ifdef TEST_T1
|
||||
test_container(vector<test_type, new_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T3
|
||||
#ifdef TEST_T2
|
||||
test_container(vector<test_type, so_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T4
|
||||
#ifdef TEST_T3
|
||||
test_container(vector<test_type, bit_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T5
|
||||
#ifdef TEST_T4
|
||||
test_container(vector<test_type, po_alloc_type>());
|
||||
#endif
|
||||
|
||||
#ifdef TEST_T6
|
||||
#ifdef TEST_T5
|
||||
test_container(list<test_type, malloc_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T7
|
||||
#ifdef TEST_T6
|
||||
test_container(list<test_type, new_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T8
|
||||
#ifdef TEST_T7
|
||||
test_container(list<test_type, so_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T9
|
||||
#ifdef TEST_T8
|
||||
test_container(list<test_type, bit_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T10
|
||||
#ifdef TEST_T9
|
||||
test_container(list<test_type, po_alloc_type>());
|
||||
#endif
|
||||
|
||||
#ifdef TEST_T11
|
||||
#ifdef TEST_T10
|
||||
test_container(map<test_type, test_type, compare_type, malloc_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T12
|
||||
#ifdef TEST_T11
|
||||
test_container(map<test_type, test_type, compare_type, new_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T13
|
||||
#ifdef TEST_T12
|
||||
test_container(map<test_type, test_type, compare_type, so_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T14
|
||||
#ifdef TEST_T13
|
||||
test_container(map<test_type, test_type, compare_type, bit_alloc_type>());
|
||||
#endif
|
||||
#ifdef TEST_T15
|
||||
#ifdef TEST_T14
|
||||
test_container(map<test_type, test_type, compare_type, po_alloc_type>());
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user