Re: [eigen] ABI break? |

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

*To*: eigen@xxxxxxxxxxxxxxxxxxx*Subject*: Re: [eigen] ABI break?*From*: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>*Date*: Thu, 26 Mar 2009 17:31:44 +0100*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=EGAqMNd8WAQwv9USCsr7OP5Hq8nwiPUolCT1RRB/cro=; b=lhW5E2r6cINeEbSkIdhtY+AOps6f9nC2oBbRhb1kdOl0Zo8jmjCwB7ylt4V9lNxHC0 l4MXDCTKaCgAQeUpfYg2+5F6EJQI0rYWItMvw4m8wJTm5OHymb5g/e1x9/rBXD7PuVll 4Y2TFX08+1Ji7+cs/OTD7LgTppkObAsrt2JNA=*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=Ah/x9DP4erqAl1IKW/hKi+bb9Sjw6LUOkOdO26nA5SsCHa4ZVB1q6y5DEdssbgkhXl PV6qfuylX83KHoE87daJHqq4rpXKfJMMoVKNY0xNBtEfnJomyNvVrCJLZQj1rw6V7UII wPCH82nVn3P0tfnGbOi+FZfWzUg1iOlHaCyOc=

ok, done. The Eigen trunk version number is now 2.0.52. Benoit 2009/3/23 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>: > Hi, > > IMO, it is pretty clear we have to change the value of AutoAlign to 0. > > About Dynamic, I would say that unless some users cannot tolerate such > an ABI break, I would change its value for a prime number and add a > limit anyway. > > gael. > > On Mon, Mar 23, 2009 at 6:18 AM, Patrick Mihelich > <patrick.mihelich@xxxxxxxxx> wrote: >> If you don't need ABI stability until 2.1, I say go ahead and make these >> sorts of mainly internal changes. Especially if it means fixing something >> nasty like the RowMajor bug. >> >> I don't have a strong opinion on the Dynamic issue either. Enforcing a hard >> limit on fixed sizes makes sense, otherwise you will have the occasional >> user who doesn't realize exactly what the difference is and blows out the >> stack. >> >> Patrick >> >> On Sat, Mar 21, 2009 at 9:55 AM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> >> wrote: >>> >>> Hi, >>> >>> at the moment there are 2 issues in Eigen 2.0 that can make us >>> considering breaking the ABI for 2.1 >>> >>> First of all, since Eigen is pure template, it doesn't have an ABI by >>> itself. So what I am speaking of, is the ABI of binary libraries >>> exposing Eigen objects. >>> >>> In any case, we must not break the ABI after the 2.1 release (e.g. >>> libavogadro wants a stable ABI, and will make their 1.0 release soon). >>> The question is whether it's still OK to break the ABI between 2.0 and >>> 2.1. >>> >>> Here are the reasons why I'm considering breaking the ABI. >>> >>> 1) (the main reason). The "Options" template parameter to the Matrix >>> class is a bit-field, with one bit controlling RowMajor/ColMajor >>> storage, and another bit controlling automatic alignment. The default >>> is column-major and automatic alignment. We made a mistake in Eigen >>> 2.0: the value 0 corresponds to NO automatic alignment. This means >>> that if you want a RowMajor matrix and you pass just "RowMajor" as the >>> Options parameter, then you don't get automatic alignement ... you >>> have to pass RowMajor|AutoAlign if you want automatic alignment. What >>> this means is that people using row-major fixed-size vectorizable >>> matrices can be puzzled as to why they don't get vectorization. The >>> obvious solution is to set AutoAlign=0 and >>> DontAlign=the_corresponding_bit. However this means that in a binary >>> library, functions taking Matrix arguments will have a different >>> mangled name, so this change breaks the ABI. >>> >>> 2) See this bug report: >>> >>> http://forum.kde.org/strange-bug-for-large-fixed-sized-matrices-t-38426..html >>> Basically, a user had a fixed-size 100x100 matrix, so the size was >>> 10000, which gave him errors as 10000 is the value of our constant >>> Dynamic. So we have 2 options: >>> a) we can enforce a hard limit on fixed-sizes, e.g. size <= 4096; >>> b) or we can change the value of Dynamic. >>> >>> If we do b), that breaks the ABI, as Dynamic is often used as a >>> template parameter for the Matrix class template. >>> >>> We've already discussed possible values for Dynamic; the obvious >>> choice of -1 is dangerous as e.g. a condition like this, >>> >>> SizeAtCompileTime <= 16 >>> >>> would be satisfied by all dynamic-size matrices; whence our choice of >>> a large positive value; but then since we're often squaring this >>> value, in order to avoid integer overflow we don't want to go above >>> sqrt(MAX_INT) which is roughly 46000; also, we want a value that's >>> easily recognizable in backtraces and compiler output; finally, the >>> above bug report shows that this value shouldn't be a square (10000 = >>> 100^2) and more generally should be a prime number; so I propose >>> 33331. >>> >>> Well, there is always the option of finally setting Dynamic=-1 but >>> then we have to be extremely careful, not only at the time we make >>> this change, but ever after! Perhaps some helper macros would help >>> then. >>> >>> I don't have a strong opinion between a) and b) but again the big >>> drawback of b) is breaking the ABI. >>> >>> Cheers, >>> Benoit >>> >>> >> >> > > >

**References**:**[eigen] ABI break?***From:*Benoit Jacob

**Re: [eigen] ABI break?***From:*Patrick Mihelich

**Re: [eigen] ABI break?***From:*Gael Guennebaud

**Messages sorted by:**[ date | thread ]- Prev by Date:
**Re: [eigen] sse transcendental functions** - Next by Date:
**Re: [eigen] sse transcendental functions** - Previous by thread:
**Re: [eigen] ABI break?** - Next by thread:
**[eigen] Signed-ness of size types, and better constructors for Matrix**

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