1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
|
# silly functions for testing/timing simple table access operations.
import profile
from kjbuckets import *
r = range(5000)
r2 = range(1000)
def dtest(d):
for i in r:
d[ (hex(i),oct(i),i) ] = hex(i)+oct(i)+`i`
def dtest2(d):
global temp
for i in r: d[ (i*33) % 1000 ] = i
for i in r: temp = d[ (i*31) % 1000 ]
for i in r: temp = d[ (i*7) % 1000 ]
def dtest3(d):
global temp
for i in r: d[ (i*33) % 1000 ] = i
for i in r: temp = d[ (i*31) % 1000 ]
for i in r: temp = d[ (i*7) % 1000 ]
for i in r2:
del d[i]
d[`i`] = `(i*3%1000)`
for i in r2:
del d[`i`]
def dtest4(d):
for i in range(10):
dtest(d)
dtest2(d)
dtest3(d)
if __name__=="__main__":
from kjbuckets import kjDict
dtest4(kjDict())
# some profiling done on my ancient sun server
#
# example stats for Python dict
#>>> D = {}
#>>> profile.run("dtest4(D)")
# 33 function calls in 83.033 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 14.383 1.438 14.383 1.438 kjtest.py:11(dtest2)
# 10 20.967 2.097 20.967 2.097 kjtest.py:17(dtest3)
# 1 0.083 0.083 83.017 83.017 kjtest.py:28(dtest4)
# 10 47.583 4.758 47.583 4.758 kjtest.py:7(dtest)
# 1 0.017 0.017 83.033 83.033 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 83.017 83.017 python:0(20520.C.2)
#
# with gsize of 1
#
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 16.650 1.665 16.650 1.665 kjtest.py:11(dtest2)
# 10 24.083 2.408 24.083 2.408 kjtest.py:17(dtest3)
# 1 0.050 0.050 84.150 84.150 kjtest.py:28(dtest4)
# 10 43.367 4.337 43.367 4.337 kjtest.py:7(dtest)
# 1 0.117 0.117 84.267 84.267 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 84.150 84.150 python:0(21460.C.1)
# with gsize of 2
#>>> profile.run("dtest4(D)")
# 33 function calls in 93.467 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 16.900 1.690 16.900 1.690 kjtest.py:11(dtest2)
# 10 24.183 2.418 24.183 2.418 kjtest.py:17(dtest3)
# 1 0.083 0.083 93.433 93.433 kjtest.py:28(dtest4)
# 10 52.267 5.227 52.267 5.227 kjtest.py:7(dtest)
# 1 0.017 0.017 93.467 93.467 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.017 0.017 93.450 93.450 python:0(20824.C.3)
#
# with gsize of 4
#33 function calls in 90.200 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 17.950 1.795 17.950 1.795 kjtest.py:11(dtest2)
# 10 26.733 2.673 26.733 2.673 kjtest.py:17(dtest3)
# 1 0.033 0.033 90.067 90.067 kjtest.py:28(dtest4)
# 10 45.350 4.535 45.350 4.535 kjtest.py:7(dtest)
# 1 0.133 0.133 90.200 90.200 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 90.067 90.067 python:0(22100.C.1)
# with gsize of 6
# 33 function calls in 98.217 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 17.017 1.702 17.017 1.702 kjtest.py:11(dtest2)
# 10 27.033 2.703 27.033 2.703 kjtest.py:17(dtest3)
# 1 0.067 0.067 98.200 98.200 kjtest.py:28(dtest4)
# 10 54.083 5.408 54.083 5.408 kjtest.py:7(dtest)
# 1 0.017 0.017 98.217 98.217 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 98.200 98.200 python:0(22727.C.2)
# with Gsize of 8
#>>> D = kjDict()
#>>> profile.run("dtest4(D)")
# 33 function calls in 106.900 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 18.683 1.868 18.683 1.868 kjtest.py:11(dtest2)
# 10 31.433 3.143 31.433 3.143 kjtest.py:17(dtest3)
# 1 0.017 0.017 106.883 106.883 kjtest.py:28(dtest4)
# 10 56.750 5.675 56.750 5.675 kjtest.py:7(dtest)
# 1 0.017 0.017 106.900 106.900 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 106.883 106.883 python:0(20520.C.4)
#
# with gsize of 16
#>>> D = kjDict()
#>>> profile.run("dtest4(D)")
# 33 function calls in 118.533 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 22.200 2.220 22.200 2.220 kjtest.py:11(dtest2)
# 10 41.233 4.123 41.233 4.123 kjtest.py:17(dtest3)
# 1 0.067 0.067 118.483 118.483 kjtest.py:28(dtest4)
# 10 54.983 5.498 54.983 5.498 kjtest.py:7(dtest)
# 1 0.033 0.033 118.533 118.533 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.017 0.017 118.500 118.500 python:0(20659.C.3)
#
# with gsize of 32
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 27.650 2.765 27.650 2.765 kjtest.py:11(dtest2)
# 10 55.600 5.560 55.600 5.560 kjtest.py:17(dtest3)
# 1 0.067 0.067 129.117 129.117 kjtest.py:28(dtest4)
# 10 45.800 4.580 45.800 4.580 kjtest.py:7(dtest)
# 1 0.100 0.100 129.217 129.217 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 129.117 129.117 python:0(21213.C.1)
#
# with gsize of 64
# 33 function calls in 177.017 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 38.983 3.898 38.983 3.898 kjtest.py:11(dtest2)
# 10 89.517 8.952 89.517 8.952 kjtest.py:17(dtest3)
# 1 0.033 0.033 176.900 176.900 kjtest.py:28(dtest4)
# 10 48.367 4.837 48.367 4.837 kjtest.py:7(dtest)
# 1 0.117 0.117 177.017 177.017 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 176.900 176.900 python:0(21657.C.1)
#
# with gsize of 128
# 33 function calls in 278.450 CPU seconds
#
# Ordered by: standard name
#
# ncalls tottime percall cumtime percall filename:lineno(function)
# 10 63.500 6.350 63.500 6.350 kjtest.py:11(dtest2)
# 10 161.283 16.128 161.283 16.128 kjtest.py:17(dtest3)
# 1 0.033 0.033 278.333 278.333 kjtest.py:28(dtest4)
# 10 53.517 5.352 53.517 5.352 kjtest.py:7(dtest)
# 1 0.117 0.117 278.450 278.450 profile:0(dtest4(D))
# 0 0.000 0.000 profile:0(profiler)
# 1 0.000 0.000 278.333 278.333 python:0(22265.C.1)
#
#Stats = { # total times
#gsize: [ dtest, dtest2, dtest3 ]
#"py": [ 47.5, 14.3, 20.9 ],
# 1: [ 43.3, 16.6, 24.0 ], # better! on dtest(?)
# 2: [ 52.2, 16.9, 24.1 ],
# 4: [ 45.3, 17.9, 26.7 ],
# 6: [ 54.0, 17.0, 27.0 ],
# 8: [ 56.7, 18.6, 31.4 ],
# 16: [ 54.9, 22.2, 41.2 ],
# 32: [ 45.8, 27.6, 55.6 ],
# 64: [ 48.3, 38.9, 89.5 ],
# 128: [ 53.5, 63.5, 161.2 ]
# }# weird increasing increasing
#
# linear performance decrease seems to start around GSIZE=64
# dtest performance seems to be heavily influenced by more complex
# key/value calculations. unreliable.
|