ANN: GMPY 1.11rc1 is available
Mensanator
mensanator at aol.com
Tue Dec 1 01:08:52 EST 2009
On Nov 29, 9:04 pm, casevh <cas... at gmail.com> wrote:
> Everyone,
>
> I'm pleased to annouce that a new version of GMPY is available.
> GMPY is a wrapper for the MPIR or GMP multiple-precision
> arithmetic library. GMPY 1.11rc1 is available for download from:
>
> http://code.google.com/p/gmpy/
>
> In addition to support for Python 3.x, there are several new
> features in this release:
>
> - Even faster conversion to/from Python longs.
> - Performance improvements by reducing function overhead.
> - Performance improvements by improved caching.
> - Support for cdivmod, fdivmod, and tdivmod.
> - Unicode strings are accepted on Python 2.x and 3.x.
> - Fixed regression in GMPY 1.10 where True/False were no
> longer recognized.
>
> Comments on provided binaries
>
> The 32-bit Windows installers were compiled with MinGW32 using MPIR
> 1.3.0rc3 and will automatically recognize the CPU type and use code
> optimized for the CPU at runtime. The 64-bit Windows installers were
> compiled Microsoft's SDK compilers using MPRI 1.3.0rc3. Detailed
> instructions are included if you want to compile your own binary.
>
> Future plans
>
> On releasing the GIL: I have compared releasing the GIL versus the
> multiprocessing module and the multiprocessing module offers better
> and more predictable performance for embarrassingly parallel tasks
> than releasing the GIL. If there are requests, I can add a compile-
> time option to enable threading support but it is unlikely to
> become the default.
>
> On mutable integers: The performance advantages of mutable integers
> appears to be 20% to 30% for some operations. I plan to add a new
> mutable integer type in the next release of GMPY. If you want to
> experiment with mutable integers now, GMPY can be compiled with
> mutable version of the standard 'mpz' type. Please see the file
> "mutable_mpz.txt" for more information.
>
> Please report any issues!
By lucky coincidence I happen to be working on a Python implementation
of Brent's Cycle Detection algorithm to locate large loop cycles in
3n+C of the Collatz conjecture. I had the algorithm worked up in pure
Python but needed to implement it using gmpy to do the heavy lifting
(due to the breakdown of my C version).
I am happy to report that my initial tests using version 1.11 seem to
be a big improvement:
## home, vista, python 3.1, gmpy 1.10
## i: 2
## f1: 101
## f2: 401
## C: 40501
## loop @: 29593
## found in: 0.000 sec
## len(sv) 88 determined in: 0.000 sec
##
## i: 3
## f1: 1009
## f2: 4001
## C: 4037009
## loop @: 12799165
## found in: 0.000 sec
## len(sv) 76 determined in: 0.000 sec
##
## i: 4
## f1: 10007
## f2: 40009
## C: 400370063
## loop @: 933402925
## found in: 0.000 sec
## len(sv) 780 determined in: 0.000 sec
##
## i: 5
## f1: 100003
## f2: 400009
## C: 40002100027
## loop @: 13522904574967
## found in: 0.015 sec
## len(sv) 2233 determined in: 0.000 sec
##
## i: 6
## f1: 1000003
## f2: 4000037
## C: 4000049000111
## loop @: 1712218136639
## found in: 0.032 sec
## len(sv) 7789 determined in: 0.015 sec
##
## i: 7
## f1: 10000019
## f2: 40000003
## C: 400000790000057
## loop @: 2519240916548647
## found in: 0.219 sec
## len(sv) 51270 determined in: 0.078 sec
##
## i: 8
## f1: 100000007
## f2: 400000009
## C: 40000003700000063
## loop @: 7032060392244193
## found in: 0.452 sec
## len(sv) 110238 determined in: 0.172 sec
##
## i: 9
## f1: 1000000007
## f2: 4000000007
## C: 4000000035000000049
## loop @: 7486962189408734959
## found in: 3.276 sec
## len(sv) 668255 determined in: 1.014 sec
##
## i: 10
## f1: 10000000019
## f2: 40000000003
## C: 400000000790000000057
## loop @: 2513183598585048828239
## found in: 15.974 sec
## len(sv) 4104051 determined in: 6.240 sec
##
## i: 11
## f1: 100000000003
## f2: 400000000019
## C: 40000000003100000000057
## loop @: 43826676662614800299839
## found in: 104.754 sec
## len(sv) 20780131 determined in: 31.840 sec
Compare that to using version 1.11 (all else equal):
## home, vista, python 3.1, gmpy 1.11
##
## i: 2
## f1: 101
## f2: 401
## C: 40501
## loop @: 29593
## found in: 0.000 sec
## len(sv) 88 determined in: 0.000 sec
##
## i: 3
## f1: 1009
## f2: 4001
## C: 4037009
## loop @: 12799165
## found in: 0.000 sec
## len(sv) 76 determined in: 0.000 sec
##
## i: 4
## f1: 10007
## f2: 40009
## C: 400370063
## loop @: 933402925
## found in: 0.015 sec
## len(sv) 780 determined in: 0.000 sec
##
## i: 5
## f1: 100003
## f2: 400009
## C: 40002100027
## loop @: 13522904574967
## found in: 0.000 sec
## len(sv) 2233 determined in: 0.000 sec
##
## i: 6
## f1: 1000003
## f2: 4000037
## C: 4000049000111
## loop @: 1712218136639
## found in: 0.016 sec
## len(sv) 7789 determined in: 0.015 sec
##
## i: 7
## f1: 10000019
## f2: 40000003
## C: 400000790000057
## loop @: 2519240916548647
## found in: 0.140 sec
## len(sv) 51270 determined in: 0.047 sec
##
## i: 8
## f1: 100000007
## f2: 400000009
## C: 40000003700000063
## loop @: 7032060392244193
## found in: 0.296 sec
## len(sv) 110238 determined in: 0.109 sec
##
## i: 9
## f1: 1000000007
## f2: 4000000007
## C: 4000000035000000049
## loop @: 7486962189408734959
## found in: 2.200 sec
## len(sv) 668255 determined in: 0.624 sec
##
## i: 10
## f1: 10000000019
## f2: 40000000003
## C: 400000000790000000057
## loop @: 2513183598585048828239
## found in: 10.624 sec
## len(sv) 4104051 determined in: 3.931 sec
##
## i: 11
## f1: 100000000003
## f2: 400000000019
## C: 40000000003100000000057
## loop @: 43826676662614800299839
## found in: 69.295 sec
## len(sv) 20780131 determined in: 19.516 sec
Good work!
>
> casevh
More information about the Python-list
mailing list