Boost logo

Boost Users :

Subject: Re: [Boost-users] [GIL] Performance warning...
From: Christian Henning (chhenning_at_[hidden])
Date: 2009-11-27 15:17:19


Hi Eloi, you're correct and I'll fix that. I can even make it const
reference. Running the test shows no real difference but that might be
only because no expensive channels are being used.

I'll commit the changes asap.

Lubomir, please review the changes if your time allows. Affected files
are channel_algorithm.hpp and gil_concept.hpp.

Thanks,
Christian

On Fri, Nov 27, 2009 at 10:06 AM, Eloi Du Bois <eloi.du.bois_at_[hidden]> wrote:
> Hi all,
>
> I am creating a bunch of function for channel merging, thus I was looking in
> channel_algorithm.hpp and I saw something that may slow down processes...
> I don't know if I'm right, but on line 362:
>
>> /// \ingroup ChannelConvertAlgorithm
>> /// \brief Converting from one channel type to another.
>> template <typename DstChannel, typename SrcChannel> // Model
>> ChannelConcept (could be channel references)
>> inline typename channel_traits<DstChannel>::value_type
>> channel_convert(SrcChannel src) {
>>     return channel_converter<typename
>> channel_traits<SrcChannel>::value_type,
>>                              typename
>> channel_traits<DstChannel>::value_type>()(src);
>> }
>
> There is no reference on parameter src.
> That not a very good idea because references aren't hold by templates
> function (even if inlined). This may invoke copy constructor and can slow
> down the processes a "lot"...
>
> Here is an example that shows I'm right in theory:
>
>> // "Slow" on big objects
>> template<typename P>
>> inline void testPtr1(P a) {
>>     std::cout << "In called function inequality ptr of a: " << (int)&a <<
>> std::endl;
>> }
>>
>> // Better
>> template<typename P>
>> inline void testPtr2(P &a) {
>>     std::cout << "In called function equality ptr of a: " << (int)&a <<
>> std::endl;
>> }
>>
>> template<typename P>
>> void test(const P & a) {
>>     std::cout << "Base ptr of a: " << (int)&a << std::endl;
>>     testPtr1(a);
>> }
>>
>> int main() {
>>     int a = 0;
>>     test(a);
>>     return 0;
>> }
>
> _______________________________________________
> 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