Replacement for GMP: Update

Reilly Hayes rfh at reillyhayes.com
Thu Aug 10 21:36:49 EDT 2006


There's one thing I don't entirely understand about the GMP problem.   
I understand that there are some limitations on GHC's ability to  
generate relocatable (and therefore dynamically linkable) code on x86  
(a register allocation problem related to the mangler if I recall the  
comments in the code correctly).  But this shouldn't prohibit linking  
GMP in dynamically, should it?  It's just a C library and GCC should  
happily generate relocatable code.  As a dynamically linked library,  
there should be no tainting issues to worry about even if the  
dynamically linked code is shipped with the executable.

Am I missing something?


On Aug 10, 2006, at 5:00 PM, Peter Tanski wrote:

> Thorkil,
>
>> I would like to mention a few things that I have not seen  
>> discussed: Clearly,
>> using an existing library unmodified would be preferable: New  
>> developments,
>> error corrections, documentation, wide exposure, all of these  
>> things would be
>> available.
>
> Agreed.  Unfortunately for us it seems that, apart from GMP, none  
> of the fully developed and fast libraries available have all the  
> functionality Haskell requires: ARPREC (and its predecessor, MPFUN)  
> lack all binary operators (AND, OR, XOR, left-shift, right-shift,  
> bit-flip, word-flip); OpenSSL's BN library lacks AND, OR, XOR and  
> the least common multiple operation (lcm), as do the libraries in  
> Botan and Crypto++.  I did not mention this before, but they also  
> lack conversion functions to and from floating point  
> representations.  So it would not be possible to use these in GHC  
> and still maintain the same functionality without writing those  
> transformation functions either separately (slow) or in the  
> libraries themselves (modification).
>
> There are libraries that have the functionality we require: MIRACL  
> (at http://indigo.ie/~mscott/) is free for educational use but  
> requires a premium for commercial use; LibTomMath is essentially  
> beta (version 0.38), slow (less than half as fast as OpenSSL, which  
> is equivalent in speed to GMP) and from my experience when putting  
> it together, a little hacked (after all, it is a beta version); MPI  
> (from http://www.cs.dartmouth.edu/~sting/mpi/) is a good library  
> and has all the math functions but lacks the binary operations and  
> has not been updated since 2003; maybe it has not required updating  
> (it was originally written in 1998).  I have read that MPI is not  
> as fast as LibTomMath (I will do a real comparison if anyone is  
> interested).  I do know from timing tests I did run in the MPI  
> distribution that MPI tends to operate better on small integers  
> (128-256 bits).  LibTomMath and MPI are both essentially public  
> domain.  I have heard that LibTomMath is used as the Tcl bignum  
> library; I do not know that library supports Perl's bignum  
> (Math::BigInt) but I could look into it.
>
> Bignum libraries are actually fairly widely available but few are  
> portable across a wide variety of domains: Microsoft's .NET bignum  
> library and Apple's vecLib BigNum library, for example.  (Apple's  
> vecLib vBigNum is also limited since it offers big integers only at  
> 256, 512 and 1024 bits and it does not provide all the mathematical  
> operations we require.)
>
> You may have noticed from reading the discussions so far that an  
> internal library *is* a possibility.
>
>> I have looked briefly at the OpenSSL Bignum library and in the  
>> areas of memory
>> management, but also error handling, it seems clearly intertwined  
>> to some
>> extent with OpenSSL in ways which would appear to rule out the  
>> direct use of
>> this library for GHC Integers.
>
> OpenSSL's BN library is primarily tuned to support cryptography,  
> particularly the generation of very large primes for public key  
> cryptosystems.  It is possible to separate the BN library out (I am  
> having some success there already).  It is also possible to use the  
> library separately from Haskell using ForeignPtr; essentially doing  
> everything through Haskell's FFI.  I have honestly not benchmarked  
> a FFI-ForeignPtr interface against the current internal-GMP  
> implementation, partly because the overhead required to use  
> ForeignPtr and the availability of garbage-collected memory for GMP  
> indicate that an internal GHC Bignum library would clearly be  
> faster.  Many people have given good arguments for using an FFI- 
> interface to such a library (for one, GMP supports dll's and posix  
> dynamic libraries, which would eliminate the licensing issue), so I  
> think before I go on I will set up a benchmark to try the two out.   
> The one thing I cannot do without taking GMP out of the GHC  
> compiler is a side-to-side comparison of GMP-FFI and GMP-internal  
> because GMP can use only one memory allocator at a time: either  
> GHC's runtime system Garbage Collector or malloc.
>
>> However, considering the advantages of using
>> an existing library unchanged, we might consider another  
>> possibility: Working
>> with the OpenSSL people to modify their library to allow the sort of
>> interfacing that is needed for its direct and efficient use in  
>> GHC. While, of
>> course, retaining its value as part of OpenSSL.
>
> I haven't looked at that for reasons of time--perhaps this is my  
> personal target and perhaps it is for the benefit of the next GHC  
> release on 26 August: it may take a long time to work with OpenSSL  
> to modify their library.  It might be worth looking into, just to  
> cover all bases.  The problem for me is that I seem to be doing all  
> the work, albeit rather slowly; I simply do not have the time to  
> follow every possibility.
>
>> (And way further back: Have we tried to discuss the LGPL licence  
>> of GMP with
>> the authors? I am not really into all these matters, sorry if this  
>> doesn't
>> make sense.)
>
> That is actually a good idea; it has been suggested before for an  
> individual developer.  I doubt very much the Free Software  
> Foundation would want to give an exception for one of their  
> flagship products but I admit, that kind of thinking is, well,  
> cowardly.  As for whether I am the person to ask them, I could  
> float the question but I could not represent the GHC Team.
>
>> Failing that, I would suggest considering the development of the  
>> modified
>> library to a form that would allow independent use, apart from its  
>> use in
>> GHC. This would add valuable possibilities to your options when  
>> choosing the
>> precise mixture of Haskell and, perhaps, raw C code that best  
>> balances your
>> performance desires and needs for convenience.
>
> Before I actually bind any library with GHC, I will thoroughly test  
> it as a stand-alone library and I will develop some good benchmarks  
> for it as an FFI-based library (using ForeignPtr).  The Creators   
> of the GHC, however, have given good arguments why it is Very Good  
> to use GHC's runtime system Garbage Collector to handle the Integer- 
> memory for bignum libraries: it is almost certainly faster, it  
> allows the runtime system's Scheduler to operate on Integers  
> without resorting to the creation or management of Operating System  
> (OS) threads and in general the evaluation of Integers is more a  
> "native" than a "foreign" operation in Haskell programs.
>
> I hope I have answered a few of your points; some of them have  
> given me more work but that is all right, I guess.  You did say  
> that you frequently use Integers in Haskell.  If you have the time,  
> would you be able to find any programs you might have that  
> displayed poor Integer performance or possibly bottlenecks in the  
> current system?  It might be helpful for benchmarking the  
> replacement--this is really supposed to be an "upgrade," after all.
>
> Best regards,
> Peter
>
>
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reilly Hayes
rfh at reillyhayes.com




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org//pipermail/glasgow-haskell-users/attachments/20060810/fe1832fc/attachment-0001.htm


More information about the Glasgow-haskell-users mailing list