[SciPy-dev] Some clarification....
eric
eric at scipy.org
Tue Feb 12 22:50:40 EST 2002
Hey Pat,
> for speed. I'll probably put in a more general Python model
> (in my copious spare time!) because loops are so slow that
>
> for i in range(n):
> < anything>
>
> will run MUCH faster as a C loop. You can get an idea of the
> over head by trying the difference between
>
> for i in xrange(n): f(i)
>
> vs
>
> map(f,xrange(n))
>
> and see the speed difference from simply doing the loop inside
> C vs inside Python.
I think this used to be a lot worse than it is now. The following simple
tests only shows modest improvement:
>>> def bob(a): return float(a)**2+a/a*10
...
>>> def q():
... result = []
... for i in range(1,100000):
... result.append(bob(i))
...
>>> t1 = time.time();q(); print time.time() - t1
0.81200003624
>>> def r():
... map(bob,range(1,100000))
...
>>> t1 = time.time();r(); print time.time() - t1
0.600999951363
>>> def r():
... map(bob,xrange(1,100000))
...
>>> t1 = time.time();r(); print time.time() - t1
0.600999951363
33% improvement is decent, but there are definitely bigger fish to fry.
> A story will illustrate....
>
> Back in the old days, when Crays were the workhorses at my
> Lab, Cray provided a hand tuned FFT that carefully tried to
> minimize bank conflicts and enhance vectorization and parallelism.
> My boss wrote one that was 10% better in about six weeks using
> a special purpose high level language (Sisal if you're interested)
> that did wonders.
Man, I can hardly imagine spending 6 weeks for 10%. He should get out
more... :-)
see ya,
eric
More information about the SciPy-Dev
mailing list