Stefan Behnel added the comment:
Just for the record, I've compiled Raymond's roadmap version in Cython (with
only slight changes to make 'self.maxsize' a Py_ssize_t and using an external
.pxd for typing) and ran Serhiy's benchmark over it (Ubuntu 12.10, 64bit). This
is what I get in Py3.4:
0.022 untyped_cy(i)
0.023 untyped_cy("spam", i)
0.024 untyped_cy("spam", "spam", i)
0.106 untyped_cy(a=i)
0.133 untyped_cy(a="spam", b=i)
0.152 untyped_cy(a="spam", b="spam", c=i)
0.033 typed_cy(i)
0.038 typed_cy("spam", i)
0.039 typed_cy("spam", "spam", i)
0.129 typed_cy(a=i)
0.168 typed_cy(a="spam", b=i)
0.183 typed_cy(a="spam", b="spam", c=i)
0.143 untyped_py(i)
0.234 untyped_py("spam", i)
0.247 untyped_py("spam", "spam", i)
0.368 untyped_py(a=i)
0.406 untyped_py(a="spam", b=i)
0.425 untyped_py(a="spam", b="spam", c=i)
0.447 typed_py(i)
0.469 typed_py("spam", i)
0.480 typed_py("spam", "spam", i)
0.745 typed_py(a=i)
0.783 typed_py(a="spam", b=i)
0.819 typed_py(a="spam", b="spam", c=i)
Looking at the factors, that's about the same speedup that the dedicated hand
tuned C implementation presented according to Serhiy's own runs (he reported
10-25x). Makes me wonder why we should have two entirely separate
implementations for this.
Here's the lru_cache_class.pxd file I used:
"""
cimport cython
cdef make_key(tuple args, dict kwds, bint typed, tuple kwd_mark)
@cython.final
@cython.internal
cdef class c_lru_cache:
cdef dict cache
cdef Py_ssize_t hits
cdef Py_ssize_t misses
cdef Py_ssize_t maxsize
cdef bint typed
cdef object user_function
cdef object cache_info_type
cdef tuple kwd_mark
cdef list root
"""
----------
nosy: +scoder
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue14373>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com