insertdict slower?

I was curious about what the DictCreation microbenchmark in pybench was slower (about 15%) with 2.1 than with 2.0. I ran both with profiling enabled (-pg, no -O) and see that insertdict is a fair bit slower in 2.1. Anyone with dict implementation expertise want to hazard a guess about this? The profiler indicates the insertdict() is about 30% slower in 2.1, when the keys are all ints. int_hash() isn't any slower, but dict_ass_sub() is about 50% slower. Of course, this is a microbenchmark that focuses on one tiny corner of dictionary usage: creating dictionaries with integer keys. This may not be a very useful measure of dictionary performance. Jeremy Results for Python 2.0 Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 54.55 3.90 3.90 285 13.68 19.25 eval_code2 6.71 4.38 0.48 4500875 0.00 0.00 lookdict 5.17 4.75 0.37 3000299 0.00 0.00 dict_dealloc 5.03 5.11 0.36 4506429 0.00 0.00 PyDict_SetItem 3.78 5.38 0.27 4500170 0.00 0.00 PyObject_SetItem 2.94 5.59 0.21 1500670 0.00 0.00 dictresize 2.80 5.79 0.20 4513037 0.00 0.00 insertdict 2.52 5.97 0.18 3000333 0.00 0.00 PyDict_New 2.38 6.14 0.17 4510126 0.00 0.00 PyObject_Hash 2.38 6.31 0.17 4500459 0.00 0.00 int_hash 2.24 6.47 0.16 3006844 0.00 0.00 gc_list_append 2.10 6.62 0.15 4500115 0.00 0.00 dict_ass_sub 1.68 6.74 0.12 3006759 0.00 0.00 gc_list_remove 1.68 6.86 0.12 3001745 0.00 0.00 PyObject_Init 1.26 6.95 0.09 3005413 0.00 0.00 _PyGC_Insert Results for Python 2.1 Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls ms/call ms/call name 50.00 3.83 3.83 998 3.84 3.84 eval_code2 6.40 4.32 0.49 4520965 0.00 0.00 lookdict 4.70 4.68 0.36 4519083 0.00 0.00 PyDict_SetItem 4.70 5.04 0.36 3001756 0.00 0.00 dict_dealloc 4.18 5.36 0.32 4500441 0.00 0.00 PyObject_SetItem 3.39 5.62 0.26 4531084 0.00 0.00 insertdict 3.00 5.85 0.23 4500354 0.00 0.00 dict_ass_sub 2.48 6.04 0.19 4507608 0.00 0.00 int_hash 2.35 6.22 0.18 4576793 0.00 0.00 PyObject_Hash 2.22 6.39 0.17 3003590 0.00 0.00 PyObject_Init 2.22 6.56 0.17 3002045 0.00 0.00 PyDict_New 2.22 6.73 0.17 1502861 0.00 0.00 dictresize 1.96 6.88 0.15 3023157 0.00 0.00 gc_list_remove 1.70 7.01 0.13 3020996 0.00 0.00 _PyGC_Remove 1.57 7.13 0.12 3023452 0.00 0.00 gc_list_append
participants (1)
-
Jeremy Hylton