[Python-Dev] Optimization idea
Jack Jansen
jack@oratrix.nl
Thu, 19 Aug 1999 16:06:01 +0200
I just had yet another idea for optimizing Python that looks so plausible that
I guess someone else must have looked into it already (and, hence, probably
rejected it:-):
We add to the type structure a "type identifier" number, a small integer for
the common types (int=1, float=2, string=3, etc) and 0 for everything else.
When eval_code2 sees, for instance, a MULTIPLY operation it does something
like the following:
case BINARY_MULTIPLY:
w = POP();
v = POP();
code = (BINARY_MULTIPLY << 8) |
((v->ob_type->tp_typeid) << 4) |
((w->ob_type->tp_typeid);
x = (binopfuncs[code])(v, w);
.... etc ...
The idea is that all the 256 BINARY_MULTIPLY entries would be filled with
PyNumber_Multiply, except for a few common cases. The int*int field could
point straight to int_mul(), etc.
Assuming the common cases are really more common than the uncommon cases the
fact that they jump straight out to the implementation function in stead of
mucking around in PyNumber_Multiply and PyNumber_Coerce should easily offset
the added overhead of shifts, ors and indexing.
Any thoughts?
--
Jack Jansen | ++++ stop the execution of Mumia Abu-Jamal ++++
Jack.Jansen@oratrix.com | ++++ if you agree copy these lines to your sig ++++
www.oratrix.nl/~jack | see http://www.xs4all.nl/~tank/spg-l/sigaction.htm