On 01.12.2013 22:59, Dan Goodman wrote: > Julian Taylor <jtaylor.debian <at> googlemail.com> writes: >> your sin and exp calls are loop invariants, they do not depend on the >> loop iterable. >> This allows to move the expensive functions out of the loop and only >> leave some simple arithmetic in the body. > > Ahhhh! I feel extremely stupid for not realising this! Thanks Julian. > > Any thoughts on why using -ffast-math it actually goes slower for just doing > sin(x)? >
no on my linux machine ffast-math is a little faster: numpy: 311 ms weave_slow: 291 ms weave_fast: 262 ms here is a pure numpy version of your calculation which only performs 3 times worse than weave: def timefunc_numpy2(a, v): ext = exp(-dt/tau) sit = sin(2.0*freq*pi*t) bs = 20000 for i in range(0, N, bs): ab = a[i:i+bs] vb = v[i:i+bs] absit = ab*sit + b vb *= ext vb += absit vb -= absit*ext it works by replacing temporaries with inplace operations and blocks the operations to be more memory cache friendlier. using numexpr should give you similar results. _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion