Right, there are 1000 integers in the vector. If something, say STL, is bottleneck for boost::bind with C++ 11, it should also be a bottleneck without C++11. And they should have the same performance. However, the fact shows that C++11 mode has some additional overhead. I wanna figure that out. 

Thanks
Athrun






At 2014-07-04 11:10:28, "Michael Powell" <mwpowellhtx@gmail.com> wrote: >On Thu, Jul 3, 2014 at 7:23 PM, ·ΉΝ° <athrun911500@163.com> 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@gmail.com> wrote: >>>On Thu, Jul 3, 2014 at 4:10 PM, ·ΉΝ° <athrun911500@163.com> 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@lists.boost.org >>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users >>>_______________________________________________ >>>Boost-users mailing list >>>Boost-users@lists.boost.org >>>http://lists.boost.org/mailman/listinfo.cgi/boost-users >> >> >> >> >> _______________________________________________ >> Boost-users mailing list >> Boost-users@lists.boost.org >> http://lists.boost.org/mailman/listinfo.cgi/boost-users >_______________________________________________ >Boost-users mailing list >Boost-users@lists.boost.org >http://lists.boost.org/mailman/listinfo.cgi/boost-users