Message51536
This patch implements a speed optimization by introducing a timestamp on dictionaries and by caching lookups of constants so that lookup doesn't need to be repeated if the dictionary didn't change.
Currently the patch implements the cached lookup only for the LOAD_GLOBAL opcode and stores the cache as two extra member in the code object. I'm going to investigate if LOAD_ATTR in the special case of a module is worth caching too.
A cache entry for LOAD_GLOBAL is defined by two timestamps (Py_ssize_t) and a *borrowed* pointer to a PyObject. The use of a borrowed pointer is safe because the value is used only if the dictionaries didn't change, so the result of lookup must still be alive because the reference in the dictionary that returned the cached value it is still in place.
The assumptions are:
- a LOAD_GLOBAL opcode always looks for the same
symbol (i.e. co_names never changes)
- the dictionary being searched (globals and
builtins) are mostly constant
On my system I got a speedup of 8%-10% on a real program (a tcp/ip server that handles an in-memory database of python objects) on the checkpoint load + rollforward steps (a few millions LOAD_GLOBAL operations in total) and the varying percentage depends on which compiler options are used to build python.
On another little test program that calls a function
def f(x):
return math.sin(x) + math.cos(x) + abs(x)
one million times the speedup with the default makefile
is about 7%.
To enable the patch the makefile should define the CACHED_LOOKUPS symbol.
The change to dictobject also exports the timestamp, at the python level; other changes are instead invisible at the python level. I'm not sure at all exporting dict.timestamp() is a good idea however...
Note that after applying the patch you may find an error in userdict if you simply use "make" (there's probably some dependency problem somewhere).
After make clean + make the test suite runs fine on my system.
I'm interested in hearing if also other platforms do actually see a real performance improvement.
Andrea |
|
Date |
User |
Action |
Args |
2007-08-23 15:55:45 | admin | link | issue1616125 messages |
2007-08-23 15:55:45 | admin | create | |
|