8.3 Benchmarking

http://sage.math.washington.edu:8100/william_32bit_add?edit

{{{
if is_64_bit:
    word = 64
else:
    word = 32
}}}

{{{
def testpy(n, op):
    a = long(ZZ.random(2^(word*n)))
    b = long(ZZ.random(2^(word*n)))
    N = 1000000
    t = cputime()
    for i in range(N):
        c = op(a, b)  
    return cputime(t)
}}}

{{{
def testgmp(n, op):
    a = ZZ.random(2^(word*n))
    b = ZZ.random(2^(word*n))
    N = 1000000
    t = cputime()
    for i in range(N):
        c = op(a, b)
    return cputime(t)
}}}

{{{
op=operator.add
for n in range(1,20):
    print 4*n, testpy(4*n,op) / testgmp(4*n,op)
///
4 0.336633663366
8 0.378640776699
12 0.388349514563
16 0.450980392157
20 0.509803921569
24 0.509259259259
28 0.527272727273
32 0.504587155963
36 0.653846153846
40 0.590476190476
44 0.681818181818
48 0.718181818182
52 0.654867256637
56 0.648648648649
60 0.973451327434
64 0.956896551724
68 0.920353982301
72 1.07894736842
76 1.04347826087
}}}

{{{
op=operator.mul
for n in range(1,10):
    print n, testpy(n,op) / testgmp(n,op)
///
1 0.475
2 0.5
3 0.527777777778
4 0.663716814159
5 0.801724137931
6 0.991596638655
7 1.21551724138
8 1.41176470588
9 1.56589147287
}}}

http://sage.math.washington.edu:8100/william_64bit_add


{{{
if is_64_bit:
    word = 64
else:
    word = 32
print word
///
64
}}}

{{{
def testpy(n, op):
    a = long(ZZ.random(2^(word*n)))
    b = long(ZZ.random(2^(word*n)))
    N = 1000000
    t = cputime()
    for i in range(N):
        c = op(a, b)  
    return cputime(t)
}}}

{{{
def testgmp(n, op):
    a = ZZ.random(2^(word*n))
    b = ZZ.random(2^(word*n))
    N = 1000000
    t = cputime()
    for i in range(N):
        c = op(a, b)
    return cputime(t)
}}}

{{{
op=operator.add
for n in range(1,20):
    print 4*n, testpy(4*n,op) / testgmp(4*n,op)
///
4 0.478991596639
8 0.5
12 0.526717557252
16 0.55905511811
20 0.5859375
24 0.615384615385
28 0.709923664122
32 0.731884057971
36 0.833333333333
40 0.873134328358
44 0.878571428571
48 0.85401459854
52 0.950704225352
56 1.1
60 1.12121212121
64 0.977941176471
68
}}}

{{{
op=operator.mul
for n in range(1,10):
    print n, testpy(n,op) / testgmp(n,op)
///
1 0.487179487179
2 0.747826086957
3 1.13913043478
4 1.56896551724
5 2.0859375
6 2.63846153846
7 3.35384615385
8 4.38636363636
9 5.0962962963
}}}

See About this document... for information on suggesting changes.