New submission from Demur Rumed: BUILD_MAP_UNPACK_WITH_CALL is _really_ slow, wasting much of its time asserting that keys are non overlapping. This patch optimizes a fast path for distinct dicts, especially useful for #27213 where BUILD_MAP_UNPACK_WITH_CALL is generated for a single **kw rather than needing **kw1,**kw2 to hit this slow opcode
This patch tracks size of dictionary, if size doesn't increase by same size as the dict we updated sum with, then we scan to find where collision is. Further optimization can be done by scanning size of dicts to preallocate dictionary Microbenchmark: from timeit import timeit def f(**x):return x timeit(lambda:f(**{'a':2},**{'b':2})) Unpatched takes ~15s Patched takes ~5s ---------- files: mapaca.patch keywords: patch messages: 268951 nosy: Demur Rumed priority: normal severity: normal status: open title: BUILD_MAP_UNPACK_WITH_CALL is slow Added file: http://bugs.python.org/file43494/mapaca.patch _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue27358> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com