Hi! Since quite some time, I'm using the Aachen C-MeatAxe as backend for linear algebra over fields of size < 255. I think I am now able to produce spkg+patch, as an optional and hopefully eventually standard package.
I see the additional matrix backend as a complement of M4RI (which is over GF(2)), M4RIE (which is over GF(2^e), 1<e<11, see trac ticket #9562) and Linbox (GF(p), p prime, see trac ticket #4260). But before being able to finish the spkg, I need some advice: Am I patching MeatAxe, or am I creating a fork? I think the answer has an impact on some details of the spkg I am now creating. My starting point is C-MeatAxe version 2.2.4. This version is not the most recent, but it is the *only* version that is licenced under GPL 2+. In fact, apart from the licence, it is identic with 2.2.3. I tested that the linear algebra in it is as fast as in the more recent versions. But actually I am not just wrapping it. First of all, MeatAxe is a collection of executables -- and I strip it down to a C-library. I fix some bugs and get rid of compiler warnings. And most importantly, I implement Winograd-Strassen multiplication (MeatAxe is only using school book multiplication). In the developer manual, I read that an spkg is supposed to provide the *original* sources that are not under version control, and if changes are made then the changes should be made by applying patches -- unless the spkg *is* upstream. In my case, the patch would be about 600kB, and it adds fairly non- trivial stuff. So, should my spkg be called "meataxe-2.2.4.p0.spkg" (patching the original sources), or "libmeataxe-1.0.spkg" (considering the modified sources as upstream)? Is the latter allowed by GPL2+? Last, but by no means least, I'm showing you some benchmarks. The timings are with spkg+patch, the corresponding times for unpatched sage are given in the comments. sage: MS = MatrixSpace(GF(5^3,'y'),1500,2000) sage: %time A = MS.random_element() CPU times: user 0.22 s, sys: 0.00 s, total: 0.22 s Wall time: 0.22 s # unpatched: 4.75 s sage: %time A.echelon_form() CPU times: user 6.67 s, sys: 0.00 s, total: 6.68 s Wall time: 6.70 s # unpatched: 282.15 s 1500 x 2000 dense matrix over Finite Field in y of size 5^3 sage: MS = MatrixSpace(GF(5^3,'y'),2000) sage: A = MS.random_element() sage: %time ~A CPU times: user 23.46 s, sys: 0.04 s, total: 23.50 s Wall time: 23.57 s # unpatched: 1090.13 s 2000 x 2000 dense matrix over Finite Field in y of size 5^3 sage: B = MS.random_element() sage: %time A*B CPU times: user 7.44 s, sys: 0.01 s, total: 7.45 s Wall time: 7.48 s # unpatched: 746.33 s 2000 x 2000 dense matrix over Finite Field in y of size 5^3 I'm afraid I am not able to compare this with Magma and Mathematica. Do you see apparent reasons why "LibMeatAxe" could not (eventually) be a standard package? Best regards, Simon -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org