This package implements a complete infrastructure for vectors over finite fields. The basic idea is, that one can store an element of a finite field using only a few bits rather than a full machine word. Therefore one can pack more than one finite field element in a machine word. This approach not only saves memory but also allows fast arithmetic.
Contrary to other implementations this package uses long word instructions for arithmetic and other operations rather than table lookups, because modern microprocessor designs seem to support faster memory access in this way and memory access is the main limiting factor for computations over finite fields. This approach also allows for bigger finite fields with more than 256 elements. For a more detailed descriptions of this design see Chapter 3.
The main purpose of this implementation is to use it in MeatAxe-like applications, that is, working with matrices consisting of compressed vectors over finite fields, doing linear algebra calculations like nullspaces, spinning of vectors, multiplying and inverting matrices and the like. Another purpose could be matrix group calculations. Usually in such computations, the base field does not change too often and not many different lengths of vectors occur. This implementation is optimized with these applications in mind and might not be very efficient for other purposes like using compressed vectors as coefficient lists of polynomials.
Another important point is that compressed vectors in this package do not even try to behave exactly like GAP lists. To the contrary, they disallow many operations that are possible for GAP lists for example changing their length or assigning arbitrary GAP objects to positions in the vector. The reason for this is that the chosen data structure does not allow to assign anything but elements of the one base field to positions in the vector and the option to change the representation on the fly
is not desirable in most applications. On the other hand one can be relatively sure not to lose compression
along the way.
Chapter 2 describes the installation of this package. Chapter 3 describes the basic design and all the data structures used in this package, including the external representation of matrices on storage. These descriptions might be very valuable to understand the behaviour of the implementation and various performance issues. Those and other performance issues are covered in Chapter 7, where you mainly find hints on how to tune your own programs that use this package. Chapters 4 to 5 describe the available functionality for vectors and matrices respectively. Chapter 8 describes, how the functionality in this package is or is not usable in connection with the GAP library. Finally, Chapter 9 shows instructive examples for the usage of this package.
For bug reports, feature requests and suggestions, please use our issue tracker.
generated by GAPDoc2HTML