
The good news is Psymeric now supports complex numbers and inplace addition and complex numbers (Complex32 and Complex64). Also by doing some tuning, I got the overhead of Psymeric down to less than three times that of Numeric (versus 20 times in the version of Numarray that I have). Even without Psyco, the code only has overhead of five and half times that of Numeric, so it seems that the Numarray folks should at least be able to get down to that level without throwing everything into C. I have not been able to increase the asymptoptic speed and I think I'm probably stuck on that front for the time being. For the most part Psymeric is close to Numeric for large arrays, which makes it about 50% faster than numarray for noncontiguous and half as fast for contiguous arrays. These timings are for Float64: for Int8, Psymeric is ~3x slower than Numeric and for Int16 it's 50% slower, for Int32 2x slower. Psymeric is very slow for Float32 and Complex32 (~10x slower than Numeric) beacause of some Psyco issues with array.arrays and floats which I expect will be fixed at some point. And finally, for Complex64, psymeric is comparable to Numeric for addition and subtraction, but almost half as fast for multiplication and almost a third as fast for division. Barring some further improvements in Psyco or some new insights on my part, this is probably as far as I'll go with this. At this point, it would probably not be hard to make this into a work alike for Numeric or Numarray (excluding the various extension modules: FFT and the like). The one relatively hard part still outstanding it ufunc.accumulate/reduce. However, the performance while very impressive for an essentially pure python solution is not good enough to motivate me to use this in preference to Numeric. If anyone is interested in looking at the code, I'd be happy to send it to them. Regards, -tim
participants (1)
-
Tim Hochberg