I'm no expert, but I would type your input arguments and use the float versions of the math.h functions since your dtypes are floats.
On Tue, Aug 25, 2009 at 11:19 AM, Adam Ginsburg<adam.ginsb...@colorado.edu> wrote: >> From: Robert Bradshaw <rober...@math.washington.edu> >> Subject: Re: [Cython] Linking error - 64 bit problem? >> >> On Aug 22, 2009, at 7:40 PM, Adam Ginsburg wrote: >> >>> I reinstalled cython from source (instead of easy_install-ing it) and >>> my code compiled successfully. Sorry about the previous e-mail. >> >> Great--I saw your previous email and started to get worried. I >> thought easy_install was a source install (we didn't ship any >> binaries until recently, and then just windows installers). > > I'm not entirely sure what happened, but I have at least 3 python > installs that I use routinely, so it was probably just a confusion > issue on my end. > >>> Unfortunately, my code runs slower with cython than without, but at >>> least now I know I can compile. In case anyone wants to offer >>> assistance, the code I'm trying to optimize is: >>> http://code.google.com/p/agpy/source/browse/trunk/plfit.py >>> http://code.google.com/p/agpy/source/browse/trunk/cplfit.pyx >> >> My first piece of advice is to run cython -a over your code. This >> will produce an html file which is most helpful in diagnosing where >> you're wasting time. Just in a quick glance at your code I noticed: >> >> - You're calling Python's log, sqrt, max, abs, sum. This would negate >> any gains you may hope to see. >> - You're calling len a lot, either store it as a int somewhere, or >> use .shape[0]. >> - Unless n is huge, arange(n)/float(n) is probably way to expensive. >> If the above don't help, try unrolling this. >> >> I bet there's a lot more performance that one could ring out of your >> code, but the above should take you far. > > > Much appreciated. I guess the various levels of yellow in the html > file indicate the slow lines? I tried getting rid of all of my numpy > calls in the loop by rewriting them as loops, but that hasn't improved > speed at all, and in fact appears to have become slower. Right now a > fortran (f2py) version goes ~75% faster and pure python goes ~25% > faster, so I must be doing something wrong. > > Example: > I changed this: > dat[xm] = numpy.max(numpy.abs(cf-cx)) > > to this: > for i from 0 <= i < n: > val = abs(cf[i]-cx[i]) > if dat[xm] < val: > dat[xm] = val > > Is that the right approach for removing max/sum ? > > And is this: > cdef extern from "math.h": > double log(double theta) > double sqrt(double theta) > double abs(double theta) > > the right way to get rid of numpy log/abs/sqrt calls? > > If you'd rather see the whole code, it's been updated on the google code site. > > Thanks, > Adam > _______________________________________________ > Cython-dev mailing list > Cython-dev@codespeak.net > http://codespeak.net/mailman/listinfo/cython-dev > _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev