[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