Boost logo

Boost :

Subject: Re: [boost] [proto] transforms && rvalue refs
From: troy d. straszheim (troy_at_[hidden])
Date: 2009-03-30 14:24:28


Eric Niebler wrote:
> troy d. straszheim wrote:
>> Eric Niebler wrote:
>>>
>>> Using expression templates to eliminate unnecessary temporaries is a
>>> well understood idiom; it's why expression templates were invented in
>>> the first place. You don't need rvalue references at all.
>>>
>>> Could you say more about what you are trying to do and why you think
>>> rvalue references are needed?
>>>
>>
>> Maybe I've missed something stupid or have organized things so as to
>> cause myself trouble. In an expression like
>>
>> // these contain pointers to memory out on the GPU
>> array<float> A, B(10,10), C(10,10);
>>
>> A = exp(B) * C;
>>
>> When it is time to evaluate the expression, the grammar fires the
>> transform for exp(B) first. It creates a temporary T with the same
>> dimensions as B and and a function is called to compute the result
>> into T. Now 'T * C' happens. In this case there is an available
>> temporary, 'T', so the result can go right in to T. T is returned and
>> moved in to A. Done... at least, that's the idea.
>
>
> This is how the expression would be evaluated eagerly -- that is, in the
> absence of expression templates -- right?
>

Yup.

>> So how should these transforms know whether their arguments are
>> overwritable or not? I didn't see how to get the 'slicing through
>> the expression' approach, as in the calc examples, with contexts and
>> overloaded operator[], to work here: each step of the calculation has
>> to get done all at once, via a function call. But maybe it is time
>> to go back and look again.
>
> You use expression templates when you can take advantage of
> domain-specific knowledge combined with a complete description of the
> expression tree you're trying to evaluate to perform domain-specific
> optimizations like loop unrolling. You need to ask yourself, "What
> special features of my domain abstraction can I use to optimize the
> evaluation of this expression?" If the answer is "rvalues," then that's
> not an answer that justifies the use of expression templates. If you can
> find a way to use the full expression to precompute the size of the
> result and compute it in-place, *now* you're talking. See?
>

That's definitely where I'm looking to go... I've been using proto to
organize things and putting off the fancier stuff until the basics are
in place. I just wanted to see if this rval thing would work. Thanks
for the help here.

-t


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