Re: [eigen] Support for true Array |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] Support for true Array
- From: Rohit Garg <rpg.314@xxxxxxxxx>
- Date: Wed, 25 Nov 2009 19:20:42 +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 :from:date:message-id:subject:to:content-type :content-transfer-encoding; bh=+A39vzoyG+2EhpwLSs6/ovP3nVR5yphC3MwhCEicQK4=; b=OADRo2b7H9cawfb7J+HO056KuNwdQyVBxviKWZ4m3kw94EkozUYUsQBDvDx0tHXIS8 tHn7bbeFo5Dem0usdTrMuvfuEKTCqdtOGuVTqMisVHoSKKvqAIsMalgp6ncChrQa+2KF KZMvY/FMUGkZygUbMrZPw0RRCo6natYpLF7pQ=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type:content-transfer-encoding; b=v/2aWmxhqx2xXI3wmW6cVrN0X+yHf0/v85mbfTSfAyfDsyqE+F9iUkxFTPmXBZS8Un 4KKWhDp4JGZwOTNYU9uIG3pS21UswKbKHAL7Dx2B6EjBDiscj07nNe7o/bPQO6fBdo6W 8RxWu/9NaOpynvkT5GLhr0OCv5E0lEaTYFr/Q=
On Wed, Nov 25, 2009 at 7:12 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
> 2009/11/25 Rohit Garg <rpg.314@xxxxxxxxx>:
>> Array Of Structures - AoS
>> ===================
>> struct float2{
>> float x,y};
>>
>> float2 arr[N];
>>
>> Structure Of Arrays - SoA
>> ===================
>> struct float2
>> {
>> float x[N],y[N];}
>>
>> SOA form has *big* advantages for simd ops over aos.
>
> Yes indeed; so: AoS is what we had so far in Eigen; SoA is what we'll
> get thanks to the new Array class, when using e.g. Matrix<Array,3,1>.
Just so that I understand it., if I define Array type at compile time,
will eigen change data layouts into soa form and then vectorize this
thing? Changing the data layouts is the key thing here. That's what
leads to soa's simd efficiency? I may have not understood what has
been presented so far, but I don't think changing the data layouts has
been proposed so far.
>
> Benoit
>
>>>
>>> This is about creating an Array class that can be used as a scalar
>>> type, and on which the arithmetic ops are vectorized. So when you have
>>> Matrix<Array,3,1> u,v,w;
>>> and you do:
>>> u = v+w;
>>> this expands (thanks to Eigen xpr templates and unrollers) to:
>>> u[0] = v[0]+w[0];
>>> u[1] = v[1]+w[1];
>>> u[2] = v[2]+w[2];
>>> Each of these 3 lines is now an operation on Array objects and expands
>>> to a vectorized loop doing the addition.
>>>
>>> Benoit
>>>
>>>
>>>
>>
>>
>>
>> --
>> 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