Here is more on libmeataxe-1.0.spkg
.
I started with Release 2.2.4 of the Aachen C MeatAxe
. This is partially because I first came in touch with MeatAxe
by old code of David Green, who was using the 2.2.3 release. MeatAxe 2.2.4
was released under GPL2+, which should be fine. There are more recent releases. However, according to Michael Ringe, while the interface changed substantially, the linear algebra is more or less the same.
The spkg contains the unmodified sources in the folder src/
, which is not under version control. The file patches/libmeataxe.patch
provides my modification. Of course, if one installs the package, the patch will automatically be applied.
Here is a summary of my changes:
- Normally,
MeatAxe
provides some executables that operate on matrices stored in files. I strip it down, such that the executables are not built and only a C library remains (this is libmeataxe-1.0.spkg). I wrap the C library using Cython (this is trac12103_meataxe.patch)
MeatAxe
uses school book multiplication. I added Strassen-Winograd multiplication, using a schedule that minimizes memory consumption. See src/src/window.c
.
- The environment variable
MTXLIB
was supposed to tell MeatAxe
where to find multiplication tables. However, this never worked for me. I fix it, so that now multiplication tables in $SAGE_ROOT/local
are used, that are created when the package is installed.
- A simpler version of the package has been part of our group cohomology spkg. Bad experiences on Solaris made me change three names: I changed
T_STRING
into T_STRINGS
,
- matextract into _matextract,
- matid into
MTXmatid
.
Please don't ask me why the Solaris linker was mistaking these symbols with symbols in completely different Sage packages, but as a matter of fact it did.
The aim of this ticket is to make the modified MeatAxe
an optional back end for dense matrices over GF(p^n)
, p>2 prime, n>1, p^n<255
. Currently, one needs to install an spkg and a patch to the Sage library.
I would prefer to have it all in one, such that sage -i libmeataxe-1.0.spkg
would automatically patch the Sage library. Question to Sage experts: Is that possible?
Anyway, I think it can be reviewed...