Re: [eigen] Cost of a map operation

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


2009/10/20 Rohit Garg <rpg.314@xxxxxxxxx>:
> On Wed, Sep 2, 2009 at 6:02 PM, Gael Guennebaud
> <gael.guennebaud@xxxxxxxxx> wrote:
>> 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);
>
> Sorry to revive an old thread for this but the above trick doesn't
> work for mapping dynamic matrices. I tried this
>
> ============
> Map<MatrixXi, ForceAligned>
> dataMatrix(dataPtr,packetPtr->fileHeader.rows,packetPtr->fileHeader.columns);
> ============
> and it refused to compile.

strange. can you show the compiler errors?

> But this is working
>
> ============
> dataMatrix = Map<MatrixXi,ForceAligned>(dataPtr,packetPtr->fileHeader.rows,packetPtr->fileHeader.columns);
> ============
>
> I just want to know how to use map here to avoid a memcpy
>>
>> 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
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>
> --
> Rohit Garg
>
> http://rpg-314.blogspot.com/
>
> Senior Undergraduate
> Department of Physics
> Indian Institute of Technology
> Bombay
>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/