Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r67674 - in sandbox/guild/pool/libs/pool: example test
From: chankwanting_at_[hidden]
Date: 2011-01-05 02:59:38


Author: ktchan
Date: 2011-01-05 02:59:36 EST (Wed, 05 Jan 2011)
New Revision: 67674
URL: http://svn.boost.org/trac/boost/changeset/67674

Log:
Move performance test to example directory
Added:
   sandbox/guild/pool/libs/pool/example/
   sandbox/guild/pool/libs/pool/example/sys_allocator.hpp
      - copied unchanged from r67671, /sandbox/guild/pool/libs/pool/test/sys_allocator.hpp
   sandbox/guild/pool/libs/pool/example/time_pool_alloc.cpp
      - copied unchanged from r67671, /sandbox/guild/pool/libs/pool/test/time_pool_alloc.cpp
Removed:
   sandbox/guild/pool/libs/pool/test/sys_allocator.hpp
   sandbox/guild/pool/libs/pool/test/time_pool_alloc.cpp

Deleted: sandbox/guild/pool/libs/pool/test/sys_allocator.hpp
==============================================================================
--- sandbox/guild/pool/libs/pool/test/sys_allocator.hpp 2011-01-05 02:59:36 EST (Wed, 05 Jan 2011)
+++ (empty file)
@@ -1,100 +0,0 @@
-// Copyright (C) 2000 Stephen Cleary
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_SYS_ALLOCATOR_H
-#define BOOST_SYS_ALLOCATOR_H
-
-// Symbols: malloc_allocator, new_delete_allocator
-
-#include <cstddef>
-#include <cstdlib>
-#include <boost/limits.hpp>
-#include <new>
-
-template <typename T>
-struct malloc_allocator
-{
- typedef T * pointer;
- typedef const T * const_pointer;
- typedef T & reference;
- typedef const T & const_reference;
- typedef T value_type;
-
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
-
- template <typename U>
- struct rebind
- {
- typedef malloc_allocator<U> other;
- };
-
- static pointer address(reference r) { return &r; }
- static const_pointer address(const_reference r) { return &r; }
- static pointer allocate(const size_type n, const pointer = 0)
- {
- const pointer ret = (pointer) std::malloc(n * sizeof(T));
- if (ret == 0)
- throw std::bad_alloc();
- return ret;
- }
- static void deallocate(const pointer p, const size_type)
- { std::free(p); }
- static size_type max_size() { return (std::numeric_limits<size_type>::max)(); }
-
- bool operator==(const malloc_allocator &) const { return true; }
- bool operator!=(const malloc_allocator &) const { return false; }
-
- malloc_allocator() { }
- template <typename U>
- malloc_allocator(const malloc_allocator<U> &) { }
-
- static void construct(const pointer p, const_reference t)
- { new ((void *) p) T(t); }
- static void destroy(const pointer p)
- { p->~T(); }
-};
-
-template <typename T>
-struct new_delete_allocator
-{
- typedef T * pointer;
- typedef const T * const_pointer;
- typedef T & reference;
- typedef const T & const_reference;
- typedef T value_type;
-
- typedef std::size_t size_type;
- typedef std::ptrdiff_t difference_type;
-
- template <typename U>
- struct rebind
- {
- typedef new_delete_allocator<U> other;
- };
-
- static pointer address(reference r) { return &r; }
- static const_pointer address(const_reference r) { return &r; }
- static pointer allocate(const size_type n, const pointer = 0)
- { return (pointer) new char[n * sizeof(T)]; }
- static void deallocate(const pointer p, const size_type)
- { delete [] p; }
- static size_type max_size() { return (std::numeric_limits<size_type>::max)(); }
-
- bool operator==(const new_delete_allocator &) const { return true; }
- bool operator!=(const new_delete_allocator &) const { return false; }
-
- new_delete_allocator() { }
- template <typename U>
- new_delete_allocator(const new_delete_allocator<U> &) { }
-
- static void construct(const pointer p, const_reference t)
- { new ((void *) p) T(t); }
- static void destroy(const pointer p)
- { p->~T(); }
-};
-
-#endif

Deleted: sandbox/guild/pool/libs/pool/test/time_pool_alloc.cpp
==============================================================================
--- sandbox/guild/pool/libs/pool/test/time_pool_alloc.cpp 2011-01-05 02:59:36 EST (Wed, 05 Jan 2011)
+++ (empty file)
@@ -1,448 +0,0 @@
-// Copyright (C) 2000, 2001 Stephen Cleary
-//
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#include <boost/pool/pool_alloc.hpp>
-#include <boost/pool/object_pool.hpp>
-
-#include <iostream>
-#include <vector>
-#include <list>
-#include <set>
-
-#include <ctime>
-#include <cerrno>
-
-#include "sys_allocator.hpp"
-
-unsigned long num_ints;
-
-template <unsigned N>
-struct larger_structure
-{
- char data[N];
-};
-
-unsigned test_number;
-
-template <unsigned N>
-static void timing_test_alloc_larger()
-{
- typedef boost::fast_pool_allocator<larger_structure<N>,
- boost::default_user_allocator_new_delete,
- boost::details::pool::null_mutex> alloc;
- typedef boost::fast_pool_allocator<larger_structure<N> > alloc_sync;
-
- double end[1][6];
- std::clock_t start;
-
- start = std::clock();
- {
- std::allocator<larger_structure<N> > a;
- for (unsigned long i = 0; i < num_ints; ++i)
- a.deallocate(a.allocate(1), 1);
- }
- end[0][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- std::free(std::malloc(sizeof(larger_structure<N>)));
- }
- end[0][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- delete new (std::nothrow) larger_structure<N>;
- }
- end[0][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc::deallocate(alloc::allocate());
- }
- end[0][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc_sync::deallocate(alloc_sync::allocate());
- }
- end[0][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- boost::pool<> p(sizeof(larger_structure<N>));
- for (unsigned long i = 0; i < num_ints; ++i)
- {
- void * const t = p.malloc();
- if (t != 0)
- p.free(t);
- }
- }
- end[0][5] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- std::cout << "Test " << test_number++ << ": Alloc & Dealloc " << num_ints << " structures of size " << sizeof(larger_structure<N>) << ":" << std::endl;
- std::cout << " std::allocator: " << end[0][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[0][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[0][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[0][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[0][4] << " seconds" << std::endl;
- std::cout << " Pool: " << end[0][5] << " seconds" << std::endl;
-}
-
-static void timing_test_alloc()
-{
- typedef boost::fast_pool_allocator<int,
- boost::default_user_allocator_new_delete,
- boost::details::pool::null_mutex> alloc;
- typedef boost::fast_pool_allocator<int> alloc_sync;
-
- double end[2][6];
- std::clock_t start;
-
- int ** p = new int*[num_ints];
-
- start = std::clock();
- {
- std::allocator<int> a;
- for (unsigned long i = 0; i < num_ints; ++i)
- a.deallocate(a.allocate(1), 1);
- }
- end[0][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- std::free(std::malloc(sizeof(int)));
- }
- end[0][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- delete new (std::nothrow) int;
- }
- end[0][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc::deallocate(alloc::allocate());
- }
- end[0][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc_sync::deallocate(alloc_sync::allocate());
- }
- end[0][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- boost::pool<> p(sizeof(int));
- for (unsigned long i = 0; i < num_ints; ++i)
- {
- void * const t = p.malloc();
- if (t != 0)
- p.free(t);
- }
- }
- end[0][5] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
-
- start = std::clock();
- {
- std::allocator<int> a;
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = a.allocate(1);
- for (unsigned long i = 0; i < num_ints; ++i)
- a.deallocate(p[i], 1);
- }
- end[1][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = (int *) std::malloc(sizeof(int));
- for (unsigned long i = 0; i < num_ints; ++i)
- std::free(p[i]);
- }
- end[1][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = new (std::nothrow) int;
- for (unsigned long i = 0; i < num_ints; ++i)
- delete p[i];
- }
- end[1][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = alloc::allocate();
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc::deallocate(p[i]);
- }
- end[1][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = alloc_sync::allocate();
- for (unsigned long i = 0; i < num_ints; ++i)
- alloc_sync::deallocate(p[i]);
- }
- end[1][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- boost::pool<> pl(sizeof(int));
- for (unsigned long i = 0; i < num_ints; ++i)
- p[i] = reinterpret_cast<int *>(pl.malloc());
- for (unsigned long i = 0; i < num_ints; ++i)
- if (p[i] != 0)
- pl.free(p[i]);
- }
- end[1][5] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- delete [] p;
-
- std::cout << "Test 3: Alloc & Dealloc " << num_ints << " ints:" << std::endl;
- std::cout << " std::allocator: " << end[0][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[0][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[0][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[0][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[0][4] << " seconds" << std::endl;
- std::cout << " Pool: " << end[0][5] << " seconds" << std::endl;
-
- std::cout << "Test 4: Alloc " << num_ints << " ints & Dealloc " << num_ints << " ints:" << std::endl;
- std::cout << " std::allocator: " << end[1][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[1][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[1][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[1][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[1][4] << " seconds" << std::endl;
- std::cout << " Pool: " << end[1][5] << " seconds" << std::endl;
-}
-
-static void timing_test_containers()
-{
- typedef boost::pool_allocator<int,
- boost::default_user_allocator_new_delete,
- boost::details::pool::null_mutex> alloc;
- typedef boost::pool_allocator<int> alloc_sync;
- typedef boost::fast_pool_allocator<int,
- boost::default_user_allocator_new_delete,
- boost::details::pool::null_mutex> fast_alloc;
- typedef boost::fast_pool_allocator<int> fast_alloc_sync;
-
- double end[3][5];
- std::clock_t start;
-
- start = std::clock();
- {
- std::vector<int, std::allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[0][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::vector<int, malloc_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[0][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::vector<int, new_delete_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[0][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::vector<int, alloc> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[0][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::vector<int, alloc_sync> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[0][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
-
- start = std::clock();
- {
- std::set<int, std::less<int>, std::allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.insert(0);
- }
- end[1][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::set<int, std::less<int>, malloc_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.insert(0);
- }
- end[1][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::set<int, std::less<int>, new_delete_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.insert(0);
- }
- end[1][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::set<int, std::less<int>, fast_alloc> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.insert(0);
- }
- end[1][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::set<int, std::less<int>, fast_alloc_sync> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.insert(0);
- }
- end[1][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
-
- start = std::clock();
- {
- std::list<int, std::allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[2][0] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::list<int, malloc_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[2][1] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::list<int, new_delete_allocator<int> > x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[2][2] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::list<int, fast_alloc> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[2][3] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- start = std::clock();
- {
- std::list<int, fast_alloc_sync> x;
- for (unsigned long i = 0; i < num_ints; ++i)
- x.push_back(0);
- }
- end[2][4] = (std::clock() - start) / ((double) CLOCKS_PER_SEC);
-
- std::cout << "Test 0: Insertion & deletion of " << num_ints << " ints in a vector:" << std::endl;
- std::cout << " std::allocator: " << end[0][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[0][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[0][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[0][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[0][4] << " seconds" << std::endl;
- std::cout << " Pool: not possible" << std::endl;
- std::cout << "Test 1: Insertion & deletion of " << num_ints << " ints in a set:" << std::endl;
- std::cout << " std::allocator: " << end[1][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[1][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[1][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[1][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[1][4] << " seconds" << std::endl;
- std::cout << " Pool: not possible" << std::endl;
- std::cout << "Test 2: Insertion & deletion of " << num_ints << " ints in a list:" << std::endl;
- std::cout << " std::allocator: " << end[2][0] << " seconds" << std::endl;
- std::cout << " malloc/free: " << end[2][1] << " seconds" << std::endl;
- std::cout << " new/delete: " << end[2][2] << " seconds" << std::endl;
- std::cout << " Pool Alloc: " << end[2][3] << " seconds" << std::endl;
- std::cout << " Pool /w Sync: " << end[2][4] << " seconds" << std::endl;
- std::cout << " Pool: not possible" << std::endl;
-}
-
-int main(int argc, char * argv[])
-{
- if (argc != 1 && argc != 2)
- {
- std::cerr << "Usage: " << argv[0]
- << " [number_of_ints_to_use_each_try]" << std::endl;
- return 1;
- }
-
- errno = 0;
-
- if (argc == 2)
- {
- num_ints = std::strtoul(argv[1], 0, 10);
- if (errno != 0)
- {
- std::cerr << "Cannot convert number \"" << argv[1] << '"' << std::endl;
- return 2;
- }
- }
- else
- num_ints = 700000;
-
- try
- {
- timing_test_containers();
- timing_test_alloc();
- test_number = 5;
- timing_test_alloc_larger<64>();
- test_number = 6;
- timing_test_alloc_larger<256>();
- test_number = 7;
- timing_test_alloc_larger<4096>();
- }
- catch (const std::bad_alloc &)
- {
- std::cerr << "Timing tests ran out of memory; try again with a lower value for number of ints"
- << " (current value is " << num_ints << ")" << std::endl;
- return 3;
- }
- catch (const std::exception & e)
- {
- std::cerr << "Error: " << e.what() << std::endl;
- return 4;
- }
- catch (...)
- {
- std::cerr << "Unknown error" << std::endl;
- return 5;
- }
-
- return 0;
-}
-
-


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk