On Nov 29, 9:04 pm, casevh <cas...@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 -- http://mail.python.org/mailman/listinfo/python-list