[Python-Dev] Comparison speed (original) (raw)
Tim Peters tim@digicool.com
Mon, 14 May 2001 16:12:44 -0400
- Previous message: [Python-Dev] deprecated platforms
- Next message: [Python-Dev] Comparison speed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Here's a simple test program:
from time import clock
indices = [1] * 100000
def doit(): s = clock() i = 0 while i < 100000: "ab" < "cd" i += 1 f = clock() return f - s
for i in xrange(10): print "%.3f" % doit()
And here's output from 2.0, 2.1 and current CVS:
C:\Code\python\dist\src\PCbuild>\python20\python timech.py 0.107 0.106 0.109 0.106 0.106 0.106 0.106 0.106 0.105 0.106
C:\Code\python\dist\src\PCbuild>\python21\python timech.py 0.118 0.118 0.117 0.118 0.117 0.118 0.117 0.118 0.117 0.118
C:\Code\python\dist\src\PCbuild>python timech.py 0.119 0.117 0.118 0.117 0.118 0.117 0.118 0.117 0.118
So "something happened" between 2.0 and 2.1 to slow this overall by 10%. string_compare hasn't changed, so rich comparisons are a good guess. Note that the more obvious timing loop obscures the issue:
def doit(): s = clock() for i in indices: "ab" < "cd" f = clock() return f - s
C:\Code\python\dist\src\PCbuild>\python20\python timech.py 0.070 0.069 0.069 0.070 0.069 0.069 0.069 0.070 0.069 0.069
C:\Code\python\dist\src\PCbuild>\python21\python timech.py 0.076 0.076 0.076 0.076 0.076 0.077 0.076 0.076 0.076 0.076
C:\Code\python\dist\src\PCbuild>python timech.py 0.069 0.070 0.070 0.069 0.069 0.070 0.070 0.069 0.070 0.069
for-loops are faster in current CVS than in 2.0 or 2.1, and that cancels out the comparison slowdown.
If we try it with a type of comparison that avoids the richcmp machinery (int < int is special-cased in ceval), current CVS is actually faster than 2.0:
def doit(): s = clock() for i in indices: 2 < 3 f = clock() return f - s
C:\Code\python\dist\src\PCbuild>\python20\python timech.py 0.056 0.056 0.056 0.056 0.055 0.056 0.058 0.058 0.055 0.056
C:\Code\python\dist\src\PCbuild>\python21\python timech.py 0.059 0.059 0.059 0.060 0.060 0.059 0.059 0.060 0.059 0.059
C:\Code\python\dist\src\PCbuild>python timech.py 0.053 0.052 0.052 0.053 0.053 0.052 0.052 0.054 0.052 0.053
C:\Code\python\dist\src\PCbuild>
This also shows that 2.1 was a bit more slothful than 2.0 for some reason other than richcmps.
These were all done on a Win2K box; timings vary too much on a Win9x box to be useful.
Anybody care to take a stab at making the new richcmp and/or coerce code ugly again?
speed-isn't-pretty-but-then-guts-rarely-are-ly y'rs - tim
- Previous message: [Python-Dev] deprecated platforms
- Next message: [Python-Dev] Comparison speed
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]