INADA Naoki added the comment: > I think the patch should not be pushed without such analysis. Perhaps > Raymond will found a time to do this.
Ok, I won't push until expert's LGTM. > One possible optimization is removing freeslot completely. because: > > * freeslot is used only when inserting. finding is more important. > * insertdict() can find dummy quickly, only looking dk_indices. > > But before trying optimization, I found this is not only optimization, but also refactoring. There is function for finding insertion point already, and insertdict() and PyDict_SetDefault() use it in some cases. So this can be done without adding any code. + ../python.default -m perf compare_to default.json patched.json -G --min-speed=2 Slower (5): - logging_silent: 736 ns +- 7 ns -> 758 ns +- 15 ns: 1.03x slower (+3%) - unpickle: 32.2 us +- 0.4 us -> 33.0 us +- 0.3 us: 1.03x slower (+3%) - unpickle_pure_python: 829 us +- 13 us -> 849 us +- 13 us: 1.02x slower (+2%) - meteor_contest: 200 ms +- 2 ms -> 204 ms +- 2 ms: 1.02x slower (+2%) - scimark_sor: 482 ms +- 8 ms -> 493 ms +- 9 ms: 1.02x slower (+2%) Faster (6): - unpack_sequence: 132 ns +- 2 ns -> 123 ns +- 0 ns: 1.07x faster (-7%) - call_simple: 14.3 ms +- 0.5 ms -> 13.7 ms +- 0.3 ms: 1.05x faster (-5%) - sqlite_synth: 10.3 us +- 0.3 us -> 9.91 us +- 0.21 us: 1.03x faster (-3%) - mako: 40.7 ms +- 0.5 ms -> 39.8 ms +- 0.3 ms: 1.02x faster (-2%) - xml_etree_parse: 319 ms +- 11 ms -> 311 ms +- 14 ms: 1.02x faster (-2%) - chameleon: 30.4 ms +- 0.4 ms -> 29.8 ms +- 0.3 ms: 1.02x faster (-2%) Benchmark hidden because not significant (53): ... ---------- Added file: http://bugs.python.org/file46423/dict-refactoring-2.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29304> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com