|Re: [eigen] Cost of a map operation|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Cost of a map operation
- From: Rohit Garg <rpg.314@xxxxxxxxx>
- Date: Wed, 2 Sep 2009 19:21:53 +0530
- 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=+Z+xgCnDWTqG2SqFCmxhK+1XkZTjgwRYK6Q6Ss9oCYs=; b=OEH+VSGaVLVd7BG9FKJ8ctwGSzCIaB9uV7uZaLsXORAtU/0ogshxySTyJ3aWWjzjVJ 2I1alhdB0i1ejrzj4uE5fhC9ZzC3KSV8pUh+NBAkfFtD6ghNguu16JvWN3MJBK120v// cGaOT52FSyP0DdTSbEJsvhXWpCKqzrWmjnhPA=
- 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=S6UE1L5IWTUtlKdJ0/W+4RsIfc0OGW33ZtJanN8gRYl5NmGp8B3fEr6WJmvfioD9hP TdGet207+yyg+A0hCQMnIpT0HpXfLxkd5ZCbzUpWfkwR45fYqnJSZ5N2a2+/JeuJGBSC zdrnWa39o3rw/FFI2/6kKU64a7No33YVY4/9w=
On Wed, Sep 2, 2009 at 6:02 PM, Gael
> 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:
Exactly what I want. I was horrified at the prospect of a memcopy,
looking at Benoit's mail, but this is reassuring!.
Since there is no memcopy involved, I assume your suggestion would
probably be say, 10 asm big? Though I'll try to checkout the real code
generated with the asm comment trick (thanks Benoit for that).
> 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.
> 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...
>> 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
>>> Senior Undergraduate
>>> Department of Physics
>>> Indian Institute of Technology
Department of Physics
Indian Institute of Technology