Skip to content

Try to use PyLong_As/FromNativeBytes API for mpz <-> int conversion#352

Closed
skirpichev wants to merge 3 commits into
diofant:masterfrom
skirpichev:try-tofrom-bytes/313
Closed

Try to use PyLong_As/FromNativeBytes API for mpz <-> int conversion#352
skirpichev wants to merge 3 commits into
diofant:masterfrom
skirpichev:try-tofrom-bytes/313

Conversation

@skirpichev

Copy link
Copy Markdown
Member

Closes #313

@skirpichev

Copy link
Copy Markdown
Member Author

At this point it looks worse:

$ pyperf compare_to export-ref.json export-patch.json
1<<7: Mean +- std dev: [export-ref] 163 ns +- 1 ns -> [export-patch] 164 ns +- 1 ns: 1.01x slower
1<<38: Mean +- std dev: [export-ref] 214 ns +- 2 ns -> [export-patch] 216 ns +- 2 ns: 1.01x slower
1<<300: Mean +- std dev: [export-ref] 633 ns +- 7 ns -> [export-patch] 804 ns +- 8 ns: 1.27x slower
1<<3000: Mean +- std dev: [export-ref] 2.32 us +- 0.01 us -> [export-patch] 3.17 us +- 0.02 us: 1.37x slower
1<<10000: Mean +- std dev: [export-ref] 6.92 us +- 0.18 us -> [export-patch] 9.66 us +- 0.02 us: 1.40x slower

Geometric mean: 1.20x slower
$ pyperf compare_to import-ref.json import-patch.json 
1<<7: Mean +- std dev: [import-ref] 256 ns +- 4 ns -> [import-patch] 251 ns +- 2 ns: 1.02x faster
1<<38: Mean +- std dev: [import-ref] 268 ns +- 10 ns -> [import-patch] 325 ns +- 5 ns: 1.21x slower
1<<300: Mean +- std dev: [import-ref] 629 ns +- 11 ns -> [import-patch] 1.29 us +- 0.02 us: 2.05x slower
1<<3000: Mean +- std dev: [import-ref] 3.16 us +- 0.02 us -> [import-patch] 3.69 us +- 0.04 us: 1.17x slower
1<<10000: Mean +- std dev: [import-ref] 9.56 us +- 0.39 us -> [import-patch] 9.90 us +- 0.05 us: 1.04x slower

Geometric mean: 1.24x slower
Details
# bench-export.py

import pyperf

from gmp import mpz

cases = ['1<<7', '1<<38', '1<<300', '1<<3000', '1<<10000']
runner = pyperf.Runner()
for c in cases:
    i = eval(c)
    m = mpz(i)
    runner.bench_func(c, int, m)
# bench-import.py

import pyperf

from gmp import mpz

cases = ['1<<7', '1<<38', '1<<300', '1<<3000', '1<<10000']
runner = pyperf.Runner()
for c in cases:
    i = eval(c)
    runner.bench_func(c, mpz, i)

@skirpichev skirpichev closed this Jul 10, 2026
@skirpichev skirpichev deleted the try-tofrom-bytes/313 branch July 10, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Experiment with PyLong_*Bytes*() API for mpz <-> int conversion

1 participant