File: kjtest.py

package info (click to toggle)
python-kjbuckets 2.2-2
  • links: PTS
  • area: main
  • in suites: slink
  • size: 264 kB
  • ctags: 266
  • sloc: ansic: 2,581; python: 363; makefile: 53
file content (214 lines) | stat: -rw-r--r-- 8,084 bytes parent folder | download | duplicates (2)
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.