[Python-Dev] Slices and "==" optimization
Martin v. Loewis
martin@v.loewis.de
Tue, 30 Oct 2001 18:54:55 +0100
> > That's why I would like the simple
> >
> > if (v == w) return 0;
> >
> > integrated into the ceval loop right along the INT-compare
> > optimization.
>
> Maybe this could be done as follows:
>
> if (v == w && PyString_CheckExact(v)) return 0;
Maybe I'm missing some context here: where is this fragment supposed
to go to? into ceval.c:COMPARE_OP? What is the "return 0;" doing then?
In any case, I think measurements should show how much speed
improvement is gained by taking this short-cut. It sounds nice in
theory, but ...
I just added the block
else if ((v == w) && (oparg == EQ) && PyString_CheckExact(v)) {
x = Py_True;
Py_INCREF(x);
}
into the code. In an application that almost exclusively does
COMPARE_OPs on identical strings, I got a 30% speed-up. OTOH, this
same code caused a 10% slowdown if I converted the "==" into "<>".
In a real application, total speed-up will depend on two things:
- how many COMPARE_OPs are done in the code?
- how many of those compare identical strings for equality?
Running the PyXML test suite, I counted 120000 cases where
slow_compare was done, and only 700 cases identical strings were
compared for equality.
Regards,
Martin