Boost logo

Boost :

From: Lars Gullik Bjønnes (larsbj_at_[hidden])
Date: 2005-12-28 06:47:49


Alex Besogonov <cyberax_at_[hidden]> writes:

| You can see that boost::function + boost::bind is an order of
| magnitude slower than FastDelegate. Even a mere invocation of a
| boost::function is slower than complete bind+invoke for FastDelegate.

This is a profile with a optimization and all inlining turned off:

#include <stdio.h>
#include <boost/timer.hpp>
#include <boost/function.hpp>

void test(int param)
{
    int i = 0;
    i = param + 1;
}

void test3()
{
    boost::timer t3;
    for(int f=0;f<100000000;f++)
    {
        boost::function<void(int)> func = &test;
        func(f);
        }
        printf("Time elapsed for bind+function: %f(sec)\n",t3.elapsed());
}

int main(void)
{
    test3();
    return 0;
}

g++ -Wextra -Wall -pg -g -O0 -fno-inline-functions -fno-inline \
-fno-inline-functions-called-once -o function function.cxx

Just the top of the profile:

Flat profile:

Each sample counts as 0.01 seconds.
  % cumulative self self total
 time seconds seconds calls s/call s/call name
 14.83 7.29 7.29 200000000 0.00 0.00 boost::detail::function::functor_manager<void (*)(int), std::allocator<void> >::manage(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type)
 13.58 13.96 6.67 100000000 0.00 0.00 void boost::function1<void, int, std::allocator<void> >::assign_to<void (*)(int)>(void (*)(int), boost::detail::function::function_ptr_tag)
 11.65 19.69 5.73 200000000 0.00 0.00 boost::function1<void, int, std::allocator<void> >::clear()
  9.10 24.16 4.47 200000000 0.00 0.00 boost::detail::function::functor_manager<void (*)(int), std::allocator<void> >::manager(boost::detail::function::any_pointer, boost::detail::function::functor_manager_operation_type, boost::detail::function::function_ptr_tag)

I have no idea if this is of any use to anyone.

-- 
	Lgb

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk