Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • pypy pypy
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 673
    • Issues 673
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 13
    • Merge requests 13
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • PyPy
  • pypypypy
  • Merge requests
  • !583

Math improvements

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Bitbucket Importer requested to merge branch/math-improvements into branch/default Nov 12, 2017
  • Overview 20
  • Commits 135
  • Changes 16

Created originally on Bitbucket by _stian (Stian Andreassen)

  • Introduce missing int_* ops for longobjects.
  • Introduce uint128_t usage (speeds up division especially)
  • Remove dead code (_k_lopsided_mul)
  • Reduce widedigit usage,
  • Negative rshift don't construct two copies due to invert(), it is done directly when needed (corner case bugged, so backed out)
  • Various other tweaks.

EDIT EDIT: Updated benchmarks (again):

# default
pidigits:
5.58517289162
5.57667803764
5.56680297852
5.59365510941
5.56935095787

rshift / negative rshift / negative division
Rshift: 3.54013109207
negative Rshift: 5.58266806602
negative division: 5.00440096855

mul / div / sub / divmod / combo (mul, div, add, sub both power of two and not):
Mul: 1.20939302444
Div: 2.71100902557
Sub: 0.872174024582
Divmod: 1.95274686813
Combo: 6.11089587212

Mul: 1.00893998146
Div: 2.70459008217
Sub: 0.880041837692
Divmod: 1.97017598152
Combo: 6.11151504517

targetbigintbenchmark (opt=2):
mod by 2:  0.008424
mod by 10000:  2.983878
mod by 1024 (power of two):  0.004757
Div huge number by 2**128: 1.334409
rshift: 1.383267
lshift: 0.947445
Floordiv by 2: 1.414989
Floordiv by 3 (not power of two): 2.373175
2**500000: 0.025707
(2**N)**5000000 (power of two): 0.034995
10000 ** BIGNUM % 100 0.666761
i = i * i: 4.330285
n**10000 (not power of two): 4.854310
Power of two ** power of two: 0.008637
v = v * power of two 3.839690
v = v * v 4.869498
v = v + v 1.745856
Sum:  30.826083

# math-improvements
pidigits:
5.07686400414
5.08084702492
5.09229803085
5.07678604126
5.07486820221

rshift / negative rshift / negative division
Rshift: 3.28986907005
negative Rshift: 3.55797290802
negative division: 3.92593812943

mul / div / sub / divmod / combo (mul, div, add, sub both power of two and not)
Mul: 0.982383012772
Div: 2.16784906387
Sub: 0.686630964279
Divmod: 1.62708497047
Combo: 4.71258592606

Mul: 0.986311912537
Div: 2.1686630249
Sub: 0.669193983078
Divmod: 1.64836978912
Combo: 4.72971796989

targetbigintbenchmark (opt=2):
mod by 2:  0.003024
mod by 10000:  2.875079
mod by 1024 (power of two):  0.004637
Div huge number by 2**128: 1.256985
rshift: 1.283785
lshift: 0.669360
Floordiv by 2: 1.325123
Floordiv by 3 (not power of two): 1.917384
2**500000: 0.025485
(2**N)**5000000 (power of two): 0.034635
10000 ** BIGNUM % 100 0.663866
i = i * i: 3.234646
n**10000 (not power of two): 4.706276
Power of two ** power of two: 0.008254
v = v * power of two 2.887551
v = v * v 4.727782
v = v + v 1.738297
Sum:  27.362169

targetbigintbenchmark (bmi2):
mod by 2:  0.003470
mod by 10000:  2.886580
mod by 1024 (power of two):  0.004507
Div huge number by 2**128: 1.278973
rshift: 1.293788
lshift: 0.664146
Floordiv by 2: 1.320495
Floordiv by 3 (not power of two): 1.916437
2**500000: 0.025505
(2**N)**5000000 (power of two): 0.036232
10000 ** BIGNUM % 100 0.652199
i = i * i: 2.875679
n**10000 (not power of two): 4.749082
Power of two ** power of two: 0.008260
v = v * power of two 2.569354
v = v * v 4.731395
v = v + v 1.728124
Sum:  26.744226
Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: branch/math-improvements