News and releases!

MPIR 2.1.1 released

The main features and changes in this release cycle are:
  • There is a long standing but latent bug in some Windows assembler code that has only now been triggered because of recent changes in higher level code. In outline the K8/K10 mpn_sublsh_n function entry point (in the file mpn/x86_64w/k8/sublsh_n.asm) was not being set up correctly. Thanks to Case Vanhorsen for reporting this bug.
  • Initial build with Visual Studio Express 2010

MPIR 2.1.0 released

The main features and changes in this release cycle are:
  • Fixed the xgcd normalisation issue and redid the tuning code for gcd and xgcd
  • Fixes for compiling with GCC 4.5.0 on Itanium
  • Initial build with Visual Studio 2010
  • Export new function mpn_sqr

MPIR Benchmark 2 (Brian Gladman, Jeff Gilchrist and Jason Moxham):

mpir_bench_two.tar.gz
mpir_bench_two.zip

N.B: the benchmark is for development purposes only, and will not give a fair comparison between different libraries. See for example the Mersenne and Fermat tests, which use MPIR functionality not necessarily present in other libraries.

IMPORTANT NOTE (updated for MPIR 1.3.0 and following):

By default MPIR produces libmpir, libmpirxx binaries and mpir.h. For libgmp, libgmpxx and gmp.h use the --enable-gmpcompat configure option. (See section 2 of the documentation for more details.) We have removed the previous requirement to type "make install-gmpcompat".

Known Issues:

  • Cygwin32: make check fails if build path contained spaces - trac #28
  • MSYS32: make check fails if only a shared library is built (the library should be compiled correctly though) - trac #199
  • Make tune will core dump with small probability on some loaded machines - trac #34
  • Fat binary x86_64 build will fail with old GNU and Sun assembler versions - trac #133
  • Test failure (mpz/t-export) on a Pentium-D with gcc 4.1.2 - appears to be a problem with the C library function memcmp not MPIR - trac #168
  • MPN_ZERO miscompiles on ia64 with gcc 4.1.2 - trac #223
  • Tuning code fails on mips64el - trac #207
  • There is a test failure on MinGW64 (bit.exe), however MinGW64 doesn't even install correctly on some of our test machines and on others we have been unable to get even GMP to build - trac #290
  • GCC 4.3.2 miscompiles MPIR on x86_64; there is little we can do about this - trac #291
  • If you are having failures when building or tuning, try setting the following prior to configuring and build:
    $ export MAKE='make'
    
    If you have failures when running the test suite, try edit the file mpirtest to use only one CPU.

The final released version of MPIR 1.3.1 is still available for download here. This version of the library is LGPL v2+. It contains NO LGPL v3+ code, as previous and later versions of MPIR do:

MPIR Version 1.3.1 - source tarball (LGPL v2+)
MPIR Version 1.3.1 - documentation
Archive of previous release announcements

Testing (updated for MPIR 2.1.0):

Here is our current testing matrix.

  • white -- system unavailable for testing. GCC 4.3.2 has a bug which results in miscompiling MPIR. There's no sense in reporting either pass (green) or failure (red) on a broken system. If we can't find a system which is sane for a given architecture/OS combination, we simply leave it white (unavailable).
  • green -- at least these commands run successfully: ./configure && make && make check. That is, MPIR configures OK, it builds, and when checking the build the check passes. This assumes that the system we used is properly set up.
  • orange -- some issue with this command: make tune
  • red -- a more serious failure with MPIR. This assumes that the system used is sane and all relevant environment variables are set up properly.

Linux

Penryn Core2 Itanium Itanium2 Mips64el AMD K7 AMD K8 AMD K10 Intel i7 Pentium4 32 bit
armv5tel armv7l powerpc970 powerpc7455 alphaev56 ultrasparc2 netburst nehalem hppa2.0

OSX

Core 2 PPC 64

FreeBSD

K8

Solaris

ultrasparc Core2

Cygwin

AMD K8 core2 Penryn Pentium 4 32 bit

MinGW32

AMD K8

MinGW64

i7

Windows

Core 2 Pentium4 32 bit i7

If you can help us add to this list by testing MPIR on a regular basis on machines you have access to, please let us know on our development list.

About MPIR

MPIR is an open source multiprecision integer (bignum) library forked from the GMP (GNU Multi Precision) project. It consists of much code from past GMP releases, in combination with much original contributed code.

MPIR is constructed by a developer and vendor friendly community of professional and amateur mathematicians, computer scientists and hobbyists.

The primary goals of the MPIR project are:

  • To have a developer friendly community.
  • To foster links with hardware and software vendors.
  • Development of parallel algorithms for multiprecision arithmetic including support for GPU's and other multicore processors.
  • To provide build support out-of-the-box for Linux, Apple, Sun and Microsoft Windows systems.
  • To overall license the project with the GNU LGPL license.
  • To maintain full interface support with GMP - MPIR is a drop-in replacement for GMP.
  • Support for building MPIR using Microsoft Visual Studio 2008 for use in both 32-bit and 64-bit versions of Windows.

Contributors

We list here the developers who have contributed code to the MPIR project (not including those who contributed to the original GMP codebase - for a full list see the AUTHORS file in the source distribution), or who have made patches available for GMP or on their websites which we have merged into the MPIR project, or who have contributed to build testing.

  • Brian Gladman - Windows MSVC port and intel format x86_64 code
  • Jason Moxham - Bug fix for perfect powers and test code and very significant and extensive improvements to the assembly code on numerous processors.
  • William Hart - Build system modifications and intel format x86_64 code, some work on Toom 4 and Toom 7 code, extended GCD version of Möller's fast GCD code
  • Pierrick Gaudry - AMD 64 assembly support
  • Gonzalo Tornaria - Patches to config.guess, cpuid.c and help with build testing
  • Jason Worth Martin - Core 2 assembly support, merge of Möller's GCD patches
  • Michael Abshoff - Build system patches, valgrinding, build testing
  • Niels Möller - Fast GCD patches
  • Burcin Erocal - help with build testing on Pentium-D
  • Mariah Lennox - improvements to mpirbench and help with build testing on numerous systems, maintenance of a build farm including installing compiler snapshots
  • Marco Bodrato and Paul Zimmermann - implementations of Toom 4 and Toom 7.
  • William Stein - build testing on certain platforms
  • Jeff Gilchrist - build testing on Windows
  • David Kirkby - Build testing on Sun servers
  • Case van Horsen - Build testing on MinGW and Cygwin
  • Anonymous Japanese contributor - assembly code improvements
  • Marshall Hampton - reported a build issue on recent apple machines
  • Robert Gerbicz - Fast root detection, factorial and binomial coefficient computation
  • David Harvey - Middle product and divide and conquer approximate quotient (see release notes for MPIR 1.3 here for details).
  • Paul Zimmermann - Multiple precision inversion code for computing precomputed inverses
  • Paul Zimmermann, Pierrick Gaudry, Alexander Kruppa, Torbjorn Granlund - new FFT code (see release notes for MPIR 1.2 here for details).
  • Peter Shrimpton - BPSW primality test code for integers up to GMP_LIMB_BITS
  • T.R.Nicely - Primality test code used in the MPIR benchmark program
  • Minh Van Nguyen - served as release manager for MPIR 2.1.0

Licensing

MPIR is overall licensed "LGPL version 3 (or at the user's option any later version of the license)". (Version 1.3.x of MPIR are licensed v2+ and this release series is considered very stable). In order to contribute to MPIR, developers are kindly requested to license their code in a manner compatible with this overall v3+ license. Versions of MPIR up to 1.2.2 inadvertently contained an LGPL v3+ file. Please distribute these versions of the library under the terms of the LGPL v3. We provide an LGPL v2.1+ version of the file, here, which you can substitute.

Note, it is not necessary to assign copyright to the Free Software Foundation in order to contribute to MPIR.

Development List

Most of our development gets discussed on our Google development list. Please feel free to join us, or just hang out. Our procedure for managing an MPIR release is documented here.

Development list: mpir-devel

An svn repository is available, fully public and can be accessed for read only anonymous access at:

http://boxen.math.washington.edu/svn/mpir/mpir/trunk

A decent page on how to use svn is here.

Development ideas

There are a number of important development directions for MPIR at present:

  • Speed up our division code, including exact division, newton iteration, division by double limbs.
  • Parallel processing, including CUDA development and OpenMP pragmas.
  • Optimise the mpn_nhgcd2 function in the mpn/nhgcd2.c file.
  • Speed up our root extraction/testing code, especially cube root.
  • Assembly support for Itanium, recent Sparc chips and MIPS.

If you would like to help out, please talk to us on our development list.

Here we provide a list of development ideas:

MPIR development projects.

Bug Tracker

All known issues with MPIR and planned features are documented on our trac system http://trac.mpir.org/mpir_trac. Please ask on our development list if you would like to have an account for the bug trac system. You don't need an account to report a bug (see below), but it may be useful if you wish to track the status of the bug.

Report a bug

The developers are pleased to hear about every and any bug. The best way to report a bug is to post to our development list. If you prefer, you can email a report to thempirteam. Please include as much detail as you can, including hardware, CPU, operating system, the output of config.guess (if relevant) and any other detail you think will help us, including exact error messages as reported.

Vendor support

MPIR is happy to acknowledge the ongoing support of sponsors who provide us with access to a hardware build farm and a part time person who assists us with infrastructure and build issues.

The MPIR project is happy to receive future support in the form of hardware, patches or finance from software and hardware vendors and other interested parties. We'd be happy to take enquiries on our development list, or thempirteam would be happy to act as a contact by email.

We are also happy to take enquiries regarding targeted development of MPIR. Note that any commercial improvements of MPIR must be contributed back to the project as Open Source. Contact us for further details.