Re: [Boost-users] boost::function performance issues with C++11
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.
What if you try with just 1 integer? Does the difference in time stay proportionally the same? Steven
Hi, there, Thanks for you guys help. I think I have reached the answer I wanted. So I'd like to explain why there are performance issues with C++11 in boost::function. First of all, I wanna reply the guys who give me hints.
What if you try with just 1 integer? Does the difference in time stay proportionally the same? There won't be big differences if there is just 1 integer. So this proofs that it could be a memory copy problem.
I'd run the example code through Callgrind (valgrind --tool=callgrind) and then compare the reports in KCachegrind. This should at least give you an idea of the source of the problem. You are right. I ran callgrind, and it showed some interesting things. If I compiled without C++11, it shows the most hot spot is "wordcopy_fwd_align". Otherwise, the most hotspot is "boost::bind" and there is no records for wordcopy_fwd_align. I think that means if we dont' use C++11, there will be some memory copy optimizations.
Maybe trying another compiler would help you obtain your "proof". How about intel compiler? It also has the "-std=c++11" flag, so, if it is a compiler issue it will be clear. As you suggested, I tried Intel compiler. It's great. The data shows there is no performance differences between with or without C++11 in boost::function. That proofs your guess that it's a compiler issue.
So here is my conclusion, there won't be memory copy optimization when using (C++11, boost::function, gcc4.9/clang3.4). But Intel compiler does well to do C++11 related optimizations.
Thanks
Athrun
At 2014-07-05 11:32:21, "Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]"
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.
What if you try with just 1 integer? Does the difference in time stay proportionally the same?
Steven _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
On Mon, Jul 7, 2014 at 7:28 PM, 饭桶
Hi, there, Thanks for you guys help. I think I have reached the answer I wanted. So I'd like to explain why there are performance issues with C++11 in boost::function. First of all, I wanna reply the guys who give me hints.
What if you try with just 1 integer? Does the difference in time stay proportionally the same? There won't be big differences if there is just 1 integer. So this proofs that it could be a memory copy problem.
I'd run the example code through Callgrind (valgrind --tool=callgrind) and then compare the reports in KCachegrind. This should at least give you an idea of the source of the problem. You are right. I ran callgrind, and it showed some interesting things. If I compiled without C++11, it shows the most hot spot is "wordcopy_fwd_align". Otherwise, the most hotspot is "boost::bind" and there is no records for wordcopy_fwd_align. I think that means if we dont' use C++11, there will be some memory copy optimizations.
I wouldn't swear off boost::bind or even std::bind. It has its place. But like I explained in an earlier response, bind is something you (you, generally) generally want to do once, like when you are connecting signal slots, wiring up functions, and so on. Once you have the thing bound, leave it alone. The same is true for any functor, type thing; there is always overhead instantiating a class (or struct), so generally you want to pick up the instance(s) you need/want, then work with them forever and ever, Amen.
Maybe trying another compiler would help you obtain your "proof". How about intel compiler? It also has the "-std=c++11" flag, so, if it is a compiler issue it will be clear. As you suggested, I tried Intel compiler. It's great. The data shows there is no performance differences between with or without C++11 in boost::function. That proofs your guess that it's a compiler issue.
So here is my conclusion, there won't be memory copy optimization when using (C++11, boost::function, gcc4.9/clang3.4). But Intel compiler does well to do C++11 related optimizations.
Glad to have helped some.
Thanks Athrun
At 2014-07-05 11:32:21, "Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]"
wrote: 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.
What if you try with just 1 integer? Does the difference in time stay proportionally the same?
Steven _______________________________________________ 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
2014-07-08 4:28 GMT+04:00 饭桶
Hi, there, Thanks for you guys help. I think I have reached the answer I wanted. So I'd like to explain why there are performance issues with C++11 in boost::function. First of all, I wanna reply the guys who give me hints.
What if you try with just 1 integer? Does the difference in time stay proportionally the same? There won't be big differences if there is just 1 integer. So this proofs that it could be a memory copy problem.
I'd run the example code through Callgrind (valgrind --tool=callgrind) and then compare the reports in KCachegrind. This should at least give you an idea of the source of the problem. You are right. I ran callgrind, and it showed some interesting things. If I compiled without C++11, it shows the most hot spot is "wordcopy_fwd_align". Otherwise, the most hotspot is "boost::bind" and there is no records for wordcopy_fwd_align. I think that means if we dont' use C++11, there will be some memory copy optimizations.
Maybe trying another compiler would help you obtain your "proof". How about intel compiler? It also has the "-std=c++11" flag, so, if it is a compiler issue it will be clear. As you suggested, I tried Intel compiler. It's great. The data shows there is no performance differences between with or without C++11 in boost::function. That proofs your guess that it's a compiler issue.
So here is my conclusion, there won't be memory copy optimization when using (C++11, boost::function, gcc4.9/clang3.4). But Intel compiler does well to do C++11 related optimizations.
Could you please create a ticket in GCC's bugzilla for this issue? Post the most interesting parts of this discussion in that ticket and then post a link to the ticket in this mailing list. Thanks in advance! -- Best regards, Antony Polukhin
sure, I will report this to GCC community.
At 2014-07-08 02:58:48, "Antony Polukhin"
What if you try with just 1 integer? Does the difference in time stay proportionally the same? There won't be big differences if there is just 1 integer. So this proofs that it could be a memory copy problem.
I'd run the example code through Callgrind (valgrind --tool=callgrind) and then compare the reports in KCachegrind. This should at least give you an idea of the source of the problem. You are right. I ran callgrind, and it showed some interesting things. If I compiled without C++11, it shows the most hot spot is "wordcopy_fwd_align". Otherwise, the most hotspot is "boost::bind" and there is no records for wordcopy_fwd_align. I think that means if we dont' use C++11, there will be some memory copy optimizations.
Maybe trying another compiler would help you obtain your "proof". How about intel compiler? It also has the "-std=c++11" flag, so, if it is a compiler issue it will be clear. As you suggested, I tried Intel compiler. It's great. The data shows there is no performance differences between with or without C++11 in boost::function. That proofs your guess that it's a compiler issue.
So here is my conclusion, there won't be memory copy optimization when using (C++11, boost::function, gcc4.9/clang3.4). But Intel compiler does well to do C++11 related optimizations. Could you please create a ticket in GCC's bugzilla for this issue? Post the most interesting parts of this discussion in that ticket and then post a link to the ticket in this mailing list. Thanks in advance! -- Best regards, Antony Polukhin
participants (4)
-
Antony Polukhin
-
Michael Powell
-
Seeger, Steven D. (GSFC-444.0)[Embedded Flight Systems, Inc]
-
饭桶