Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::function performance issues with C++11
From: Michael Powell (mwpowellhtx_at_[hidden])
Date: 2014-07-03 23:10:28


On Thu, Jul 3, 2014 at 7:23 PM, 饭桶 <athrun911500_at_[hidden]> wrote:
> Hi Michael,
>
> Thanks for your suggestion. I understand that using a reference or a pointer
> will achieve better performance, and I really appreciate you pointed out
> that for me.
> But I intend to do this to highlight my point, that the performance are
> quite different with or without -std=c++11. And I'm really curious about
> that.
>
> Consider a situiation, that I'm using boost::function. However, the
> performance could be seriously affected by using a compiling flag
> (-std=c++11). That will be very weired to me, unless someone can tell me
> what happens there.

Well, you're testing potentially two things: STL performance, or
std::bind performance. Couldn't tell you which is the bottleneck, but
neither in my mind are trivial depending how many elements are in your
vector.

> BTW, when I say default, I mean release mode.
> Thanks
> Xuepeng
>
>
>
>
>
>
> At 2014-07-04 07:55:39, "Michael Powell" <mwpowellhtx_at_[hidden]> wrote:
>>On Thu, Jul 3, 2014 at 4:10 PM, 饭桶 <athrun911500_at_[hidden]> wrote:
>>> Hi,
>>>
>>> Does anyone know why -std=c++11 causes so much difference on
>>> boost::function?
>>>
>>> I was planed to understand if there any performance issues with big size
>>> of
>>> parameters.
>>> So I wrote a function that takes a vector as parameter, like func2 shows.
>>> I
>>> know it's better to use a pointer or reference as function parameter. I
>>> just
>>> want to evaluate the performance, so let's keep the vector as parameter.
>>>
>>> However, I found that it's quite slow when compiled with -std=c++11. In
>>> detail, it takes 173874 milliseconds with C++11, while it takes 3676
>>> seconds
>>> without C++11.
>>>
>>> About 50 times slower!! How can that be?
>>>
>>> In my opinion, I thought boost::function should had the same performance
>>> with std::function. So I decided to try std::function in C++11 directly,
>>> Finally, it takes about 29233 milliseconds. That's till 8 times slows!
>>>
>>> Can anyone tell me what happend here?
>>
>>I don't know the inner workings of either boost::function or
>>std::function. It's not boost's fault per se, but there are a couple
>>of things you could do differently.
>>
>>> int func2(std::vector<int> i){
>>> total += i.size();
>>> return i.size();
>>> }
>>
>>Pass a reference or even a pointer instead of the whole vector. You
>>are copying the vector every time.
>>
>>> const int T = 1000000;
>>> s = boost::chrono::system_clock::now();
>>> for (int i = 0; i < T; ++i)
>>> call(boost::bind(&func2, v));
>>> e = boost::chrono::system_clock::now();
>>
>>You are also binding func2 every time; not sure if that's getting
>>optimized or not.
>>
>>You likely want to bind with a placeholder instead of the vector
>>itself, then call the binding itself. i.e.
>>
>>auto binding = boost::bind(&func2, _1);
>>binding(v);
>>
>>I do that frequently enough; and with more event-driven systems,
>>boost::signals, etc, it is unavoidable. You want the placeholder
>>instead, once-bound/later-called.
>>
>>> In case you need to know my enviorment, my OS is Arch, compiler is gcc
>>> 4.9.0, and optimizations are default.
>>
>>Default can mean a lot of things. Debug or release mode? Beyond those
>>two broad categories, do verify your settings and build for release
>>mode.
>>
>>HTH
>>
>>> The execution time (ms) of three versions I tried:
>>> boost::function with C++11 : 173874
>>> boost::function without C++11 : 3676
>>> std::function in C++11 : 29233
>>>
>>> Any thoughts are appreciated!
>>> Thanks,
>>> Athrun
>>>
>>>
>>>
>>> _______________________________________________
>>> Boost-users mailing list
>>> Boost-users_at_[hidden]
>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>_______________________________________________
>>Boost-users mailing list
>>Boost-users_at_[hidden]
>>http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net