next up previous contents
Next: LiDIA -Group Up: Overview Previous: Overview

Introduction

 

In early 1994 our research group in computational number theory at the Department of Computer Science of the Universität des Saarlandes, Germany, was working on implementations of algorithms for factoring integers, determining discrete logarithms in finite fields, counting points on elliptic curves over finite fields, etc. In those implementations three different multiprecision integer packages were used. The code written for those implementations was hard to read and hardly documented as well. Therefore, many basic routines were written over and over again, often not very efficiently.

Because of this we decided to organize all the software in a library which we called LiDIA   . The organisation of this task, the development of the general concept of the library and the implementation of the basic components as the kernel, the interface and the majority of the components for doing arithmetic were designed and implemented by Thomas Papanikolaou.

Since we find that object oriented programming is appropriate for implementing mathematical algorithms and since C and C++ belong to the most accepted programming languages in scientific computing, we decided to use C++ as the implementation language for LiDIA . To guarantee easy portability of LiDIA we decided to have a very small machine dependent kernel in LiDIA . That kernel currently only contains the multiprecision integer arithmetic. In the next release it will also contain a memory manager. All LiDIA classes are written in C++ and compiled with different compilers on different architectures. Currently we use the compilers CC (cfront-3.0.1) and g++-2.5.8, g++-2.6.x on sparc7, sparc8, mips R4000, intel 386/486, hp 9000/712 and hp 9000/735. Moreover, we support the emx-0.9a -- Port of g++-2.6.3 on OS/2 -- systems with an HPFS -- partition.

It is a serious problem to decide which multiprecision integer package and which memory manager should be used in LiDIA . There are competing multiprecision integer packages, for example the GNU gmp -package [18], the libI -package [12], and the lip -package [27]. Some of those packages are more efficient on one architecture and some on others. Also, new architectures will lead to new multiprecision packages. We decided to make LiDIA independent of a particular kernel and to make it easy to replace the LiDIA -kernel. To achieve this, we separate the kernel from the application programs by an interface in which the declarations, operators, functions, and procedures dealing with multiprecision integers and the memory management are standardized. All LiDIA -classes use the kernel through that interface. They never use the kernel functions directly. Whenever new kernel packages are used only the interface has to be changed appropriately but none of the LiDIA classes has to be altered. In the LiDIA 1.1 package we have included the libI -package by Ralf Dentzer [12].

We try to develop extremely efficient code for the algorithms we offer in the LiDIA system. Moreover we try to keep the dependency of parts of the library on each other to a minimum and to define interfaces precisely in order to be able to replace modules by more efficient modules in an efficient way.

Although not in the public domain, LiDIA can be used freely for non commercial purposes (see copyright notice, page gif).



next up previous contents
Next: LiDIA -Group Up: Overview Previous: Overview



LiDIA Administrator
Thu Aug 10 16:41:08 MET DST 1995