Re: [eigen] Cost of a map operation |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Cost of a map operation
- From: Gael Guennebaud <gael.guennebaud@xxxxxxxxx>
- Date: Wed, 2 Sep 2009 14:32:43 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=wAmRhZJbXmZfzb7QCWlp3/umrgn0ChxCzUVaXvQh1k4=; b=wlV7I52arzP18OK0KPDkXU+ouqqPpuO3HG+MIWIngK+Xaw+baKDFvPd6HQIeW/6U/L EKzbqD96Yci08xA2yVIWcSyqFoeW5PLL+Ho7p85TYCRa5WuqKcqe1mkjLoh1ejBKtpif YnPp5MWiYJVeVsQyojIRWhBzXy9Uht/sSK0FQ=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=YyOLIgmFc2wLCENdS/N/RS6a0qEbfDZxyoRKyk3aQCOeqGXtYkH/Pk3Bv0pbSHQACC q+aCrR2023toL39grG2LhktmOT4PhIgySqzDtiqHyoYBziEITnWhj7LvoqNPCSttstGC JRaSm4LnyAw01M5jnXB14LnZGpICJJbHgFjtE=
perhaps here you don't want to copy it to an Eigen vector but directly
use *address as an Eigen vector. For that you simply declare:
Map<AddressVector_t,ForceAligned> AddressVector(address);
and use AddressVector as any other Eigen vector, e.g.:
AddressVector *= 2;
that is the same as directly modifying address:
for(int i=0; bla; bla)
address[i] *= 2;
with all Eigen's goodies.
cheers,
gael.
On Wed, Sep 2, 2009 at 2:16 PM, Benoit Jacob<jacob.benoit.1@xxxxxxxxx> wrote:
> This is as efficient as it could be: typically, this expands to
> nothing more than:
>
> for(int i = 0; i < cordNum; ++i)
> AddressVector[i] = address[i];
>
> and then 1) Eigen unrolls this if appropriate and 2) Eigen vectorizes
> this if possible.
>
> Basically, the Map object itself is just an expression, so its
> construction is cheap at least, and in practice the compiler is able
> to avoid actually creating it, everything gets "inlined".
>
> Tip: you could check the resulting assembly code for yourself, just
> put asm comments around this, asm("#hello"); , and use gcc -S to get
> the assembly...
>
> Benoit
>
>
>
> 2009/9/2 Rohit Garg <rpg.314@xxxxxxxxx>:
>> What is the cost of this map operation?
>>
>> AddressVector_t AddressVector = Map<AddressVector_t,ForceAligned>(address)
>>
>> where AddressVector_t itself is a typedef for
>>
>> typedef Matrix<int,cordNum,1> AddressVector_t;
>>
>> cordNum is a compile time constant.
>>
>> This map operation occurs in inner loop of my application, so I want
>> to know, how costly is it gonna be? I mean with what use in mind was
>> it written for?
>> --
>> Rohit Garg
>>
>> http://rpg-314.blogspot.com/
>>
>> Senior Undergraduate
>> Department of Physics
>> Indian Institute of Technology
>> Bombay
>>
>>
>>
>
>
>