|
From: <co...@ph...> - 2006-02-17 19:30:29
|
Tim Hochberg <tim...@co...> writes: > Here's a little progress report: I now have A**2 running as fast as > square(A). This is done by special casing stuff in array_power so that > A**2 acutally calls square(A) instead of going through power(A,2). > Things still need a bunch of cleaning up (in fact right now A**1 > segfaults, but I know why and it should be an easy fix). However, I > think I've discovered why you couldn't get your special cased power to > run as fast for A**2 as square(A) or A*A. It appears that the overhead > of creating a new array object from the integer 2 is the bottleneck. I > was running into the same mysterious overhead, even when dispatching > from array_power, until I special cased on PyInt to avoid the array > creation in that case. Hmm, if that's true about the overhead, that'll hit all computations of the type op(x, <some scalar>). Something to look at. That ufunc code for casting the arguments is pretty big and hairy, so I'm not going to look at right now :-) -- |>|\/|< /--------------------------------------------------------------------------\ |David M. Cooke http://arbutus.physics.mcmaster.ca/dmc/ |co...@ph... |