On Tue, Mar 24, 2009 at 7:30 AM, Daniel Stutzbach < daniel at stutzbachenterprises.com> wrote: > On Tue, Mar 24, 2009 at 4:30 AM, Hrvoje Niksic <hrvoje.niksic at avl.com>wrote: > >> Agreed, and more importantly, I have yet to be convinced that those NULL >> checks introduce a measurable slowdown. Daniel, have you tried measuring >> the performance difference with only the NULL checks removed? > > > I'll play around with different permutations and report back on their > impact. After playing around with it, I see that I was barking up the wrong tree. That's what I get for tracing through code visually instead of using a debugger. PyList implements tp_as_mapping, so it's mp_subscript method is called and the PySequence line is never used. I tried many variations of special casing at various points in the path and removing extra checks. It looks like function calls are the biggest expense. Calls to functions within the same module appear to be cheap (presumably because gcc inlines them). 100 nanoseconds, py3k trunk: ceval -> PyObject_GetItem (object.c) -> list_subscript (listobject.c) -> PyNumber_AsSsize_t (object.c) -> PyLong_AsSsize_t (longobject.c) 86 nanoseconds, by special-casing PyLong in list_subscript ceval -> PyObject_GetItem (object.c) -> list_subscript (listobject.c) -> PyLong_AsSsize_t (longobject.c) cost: could slow down mylist[some_PyNumber_that_is_not_a_long_yet_still_a_valid_index] (who cares?) 75 nanoseconds, by special-casing PyList and PyLong in PyObject and using PyList_GET_ITEM ceval -> PyObject_GetItem (object.c) -> PyLong_AsSsize_t (longobject.c) cost: could slow down not_a_list[x] 75 nanoseconds, by special-casing PyList and PyLong in ceval and using PyList_GET_ITEM ceval -> PyLong_AsSsize_t (longobject.c) cost: could slow down not_a_list[x] I had been hoping to find something general to speed up all uses of __getitem__, but that doesn't seem possible. Oh well. :-( -- Daniel Stutzbach, Ph.D. President, Stutzbach Enterprises, LLC <http://stutzbachenterprises.com> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-dev/attachments/20090324/81bb90de/attachment-0001.htm>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4