fowode / pychess

Automatically exported from code.google.com/p/pychess
GNU General Public License v3.0
0 stars 0 forks source link

Investigate gmpy usage #772

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
On my 32bit Linux distrib using gmpy not produces better search than not using 
it.
Will investigate on 64bit Debian.

Original issue reported on code.google.com by gbtami on 24 May 2013 at 8:28

GoogleCodeExporter commented 9 years ago
Seems with new bitLength function (introduced in rev 4ced4b20f261) searching 
with gmpy is no more preformant than native python. Using profile command (thx 
Justin!) for benchmarking I got:

tamas@localhost:~/pychess/lib/pychess/Players/with-gmpy$ python print_pstats.py 
Fri May 24 21:05:33 2013    rep.prof

         668083275 function calls (665324580 primitive calls) in 488.063 CPU seconds

   Ordered by: cumulative time
   List reduced from 109 to 60 due to restriction <60>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000  488.063  488.063 <string>:1(<module>)
        1    0.003    0.003  488.063  488.063 /home/tamas/pychess/lib/pychess/Utils/lutils/Benchmark.py:29(benchmark)
1036890/80   11.367    0.000  487.904    6.099 
/home/tamas/pychess/lib/pychess/Utils/lutils/lsearch.py:25(alphaBeta)
2637943/916058   15.350    0.000  401.346    0.000 
/home/tamas/pychess/lib/pychess/Utils/lutils/lsearch.py:228(quiescent)
  2449973   20.349    0.000  222.552    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:18(evaluateComplete)
134571369   66.588    0.000   84.828    0.000 
/home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:132(iterBits)
  4899946   25.705    0.000   69.212    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:108(evalKingTropism)
  2791880   20.726    0.000   47.326    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:358(applyMove)
  2346858    2.842    0.000   43.627    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lsort.py:8(getCaptureValue)
  2791289   15.727    0.000   41.552    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:478(popMove)
  1989260   15.821    0.000   40.785    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:156(staticExchangeEvaluate)
  4899946   20.928    0.000   36.493    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:274(evalPawnStructure)
  3129095   12.439    0.000   24.470    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:268(genCaptures)
  7290312   16.693    0.000   22.549    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:306(_removePiece)
  2449973    9.467    0.000   20.830    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:169(cacheablePawnInfo)
  7290517   14.765    0.000   20.157    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:293(_addPiece)
  4531407   13.484    0.000   19.916    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:55(getAttacks)
  3674753    5.170    0.000   18.976    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:77(test)
  4899946    9.543    0.000   18.560    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:535(evalRooks)
  6023811   13.863    0.000   16.615    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:11(isAttacked)
  4899946   10.319    0.000   14.255    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:436(evalDev)
 28985072    9.660    0.000   13.822    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:99(bitLength)
  3783359    8.956    0.000   11.886    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lsort.py:22(getMoveValue)
  2449973    8.473    0.000   11.832    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:42(evalMaterial)
 79684035   11.712    0.000   11.712    0.000 {method 'popcount' of 'mpz' objects}
  3674925    3.172    0.000   10.973    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:276(isChecked)
 84677299   10.810    0.000   10.810    0.000 {method 'scan1' of 'mpz' objects}
  4899946    6.422    0.000   10.185    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:479(evalBishops)
  4899946    7.151    0.000   10.122    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:388(evalKing)
  3812285    4.075    0.000    9.348    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:112(genAllMoves)
  2431315    2.425    0.000    9.146    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:282(opIsChecked)
   992931    2.416    0.000    9.127    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:475(genCheckEvasions)
  2449973    6.630    0.000    8.498    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:157(probePawns)
 30031517    8.314    0.000    8.314    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:41(clearBit)
  3674753    5.251    0.000    7.264    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:52(repetitionCount)
  1036740    5.727    0.000    7.203    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/TranspositionTable.py:39(probe)
  4899946    4.837    0.000    7.011    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:374(evalDoubleQR7)
  3536513    1.881    0.000    6.564    0.000 {sum}
  9188981    4.180    0.000    5.815    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:52(firstBit)
 21871551    5.392    0.000    5.392    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:30(setBit)
  3674603    2.856    0.000    5.357    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:34(testMaterial)
  2449973    3.704    0.000    3.704    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:504(evalTrappedBishops)
  6576294    3.410    0.000    3.410    0.000 {method 'unpack_from' of 'Struct' objects}
  3063529    2.628    0.000    3.405    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:254(addXrayPiece)
  4085965    1.568    0.000    3.075    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:317(<genexpr>)
  5583185    2.897    0.000    2.897    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:318(setColor)
 22330312    2.853    0.000    2.853    0.000 {method 'pop' of 'list' objects}
  9332250    2.550    0.000    2.550    0.000 {max}
 17010822    2.524    0.000    2.524    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldata.py:7(FILE)
 25106285    2.307    0.000    2.307    0.000 {method 'append' of 'list' objects}
  6843249    2.174    0.000    2.174    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:22(newMove)
  6023645    2.039    0.000    2.039    0.000 {min}
  9188981    1.635    0.000    1.635    0.000 {method 'numdigits' of 'mpz' objects}
  1405101    0.627    0.000    1.608    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:366(<genexpr>)
  2791896    1.401    0.000    1.401    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:337(setEnpassant)
  3391260    1.346    0.000    1.346    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/TranspositionTable.py:81(isKiller)
  2346858    1.308    0.000    1.308    0.000 {_heapq.heappush}
  1745836    1.289    0.000    1.289    0.000 {_heapq.heappop}
  3674603    1.185    0.000    1.185    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:5(testFifty)
   120639    1.176    0.000    1.176    0.000 {method 'sort' of 'list' objects}

tamas@localhost:~/pychess/lib/pychess/Players/no-gmpy$ python print_pstats.py 
Fri May 24 21:14:11 2013    rep.prof

         552166560 function calls (549407865 primitive calls) in 468.027 CPU seconds

   Ordered by: cumulative time
   List reduced from 107 to 60 due to restriction <60>

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000  468.027  468.027 <string>:1(<module>)
        1    0.003    0.003  468.027  468.027 /home/tamas/pychess/lib/pychess/Utils/lutils/Benchmark.py:29(benchmark)
1036890/80   10.688    0.000  467.873    5.848 
/home/tamas/pychess/lib/pychess/Utils/lutils/lsearch.py:25(alphaBeta)
2637943/916058   14.685    0.000  383.575    0.000 
/home/tamas/pychess/lib/pychess/Utils/lutils/lsearch.py:228(quiescent)
  2449973   20.137    0.000  210.332    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:18(evaluateComplete)
134571369   53.596    0.000   53.596    0.000 
/home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:140(iterBits)
  4899946   23.697    0.000   51.398    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:108(evalKingTropism)
  2791880   19.880    0.000   46.515    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:358(applyMove)
  2346858    2.751    0.000   42.462    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lsort.py:8(getCaptureValue)
  2791289   14.567    0.000   40.462    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:478(popMove)
  1989260   15.742    0.000   39.711    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:156(staticExchangeEvaluate)
 28985072   14.905    0.000   38.417    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:123(bitLength)
  4899946   19.252    0.000   32.633    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:274(evalPawnStructure)
  3674753    4.931    0.000   24.651    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:77(test)
  7290312   16.079    0.000   23.119    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:306(_removePiece)
  7290517   14.510    0.000   20.109    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:293(_addPiece)
  2449973    8.843    0.000   19.647    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:169(cacheablePawnInfo)
  3129095   12.048    0.000   18.791    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:268(genCaptures)
  4531407   13.939    0.000   18.549    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:55(getAttacks)
  4899946    6.575    0.000   17.237    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:479(evalBishops)
 28985072   16.312    0.000   16.312    0.000 {bin}
  6023811   14.409    0.000   15.960    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:11(isAttacked)
  4899946    9.237    0.000   15.953    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:535(evalRooks)
  2449973    8.434    0.000   14.319    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:42(evalMaterial)
  4899946    6.673    0.000   13.593    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:388(evalKing)
  4899946    8.756    0.000   12.102    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:436(evalDev)
  3783359    8.476    0.000   11.264    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lsort.py:22(getMoveValue)
  3674603    2.758    0.000   11.094    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:34(testMaterial)
  3674925    3.112    0.000   10.789    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:276(isChecked)
  4899946    5.175    0.000    9.813    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:374(evalDoubleQR7)
 30031517    9.767    0.000    9.767    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:41(clearBit)
  2431315    2.316    0.000    8.636    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:282(opIsChecked)
  3812285    3.897    0.000    8.547    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:112(genAllMoves)
   992931    2.341    0.000    8.434    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:475(genCheckEvasions)
  3536513    1.870    0.000    7.618    0.000 {sum}
  2449973    5.807    0.000    7.509    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:157(probePawns)
  3674753    5.502    0.000    7.458    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:52(repetitionCount)
 28985072    7.200    0.000    7.200    0.000 {method 'count' of 'str' objects}
  1036740    5.518    0.000    6.930    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/TranspositionTable.py:39(probe)
 21871551    5.599    0.000    5.599    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:30(setBit)
  9188981    5.418    0.000    5.418    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/bitboard.py:56(firstBit)
  4085965    1.480    0.000    4.656    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:317(<genexpr>)
  3063529    2.716    0.000    3.560    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/attack.py:254(addXrayPiece)
  2449973    3.500    0.000    3.500    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:504(evalTrappedBishops)
  6576294    3.175    0.000    3.175    0.000 {method 'unpack_from' of 'Struct' objects}
  5583185    2.821    0.000    2.821    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:318(setColor)
 22330312    2.683    0.000    2.683    0.000 {method 'pop' of 'list' objects}
 17010822    2.469    0.000    2.469    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldata.py:7(FILE)
 25106285    2.169    0.000    2.169    0.000 {method 'append' of 'list' objects}
  9332250    2.060    0.000    2.060    0.000 {max}
  6023645    1.922    0.000    1.922    0.000 {min}
  6843249    1.899    0.000    1.899    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/lmovegen.py:22(newMove)
  2791896    1.341    0.000    1.341    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/LBoard.py:337(setEnpassant)
  3391260    1.278    0.000    1.278    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/TranspositionTable.py:81(isKiller)
  1745836    1.189    0.000    1.189    0.000 {_heapq.heappop}
  3674603    1.169    0.000    1.169    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/ldraw.py:5(testFifty)
   120639    1.159    0.000    1.159    0.000 {method 'sort' of 'list' objects}
  2346858    1.153    0.000    1.153    0.000 {_heapq.heappush}
  1405101    0.579    0.000    1.092    0.000 /home/tamas/pychess/lib/pychess/Utils/lutils/leval.py:366(<genexpr>)
  2065763    0.884    0.000    0.884    0.000 {range}

Original comment by gbtami on 24 May 2013 at 8:44

GoogleCodeExporter commented 9 years ago
Removed gmpy in rev #83e1de93438c

Original comment by gbtami on 24 May 2013 at 9:47

GoogleCodeExporter commented 9 years ago
Hi. I maintain gmpy and found this issue via a Google search. I've released a 
new version called gmpy2 that contains some enhancements that may improve the 
performance relative to gmpy. There is a new mutable (!) integer type called 
xmpz that supports better bit access. Assuming X is an xmpz instance, you do 
the following:

X.iter_set() -> creates a generator that returns the bit positions that are set
X[7] = 1 -> set bit 8 (count starts with 0) to 1

Feel free to contact me if you have any questions.

casevh

Original comment by casevh on 31 May 2013 at 5:20

GoogleCodeExporter commented 9 years ago
@casevh, thx. for the info! I will try gmpy2.

Original comment by gbtami on 31 May 2013 at 9:29