[Numpy-discussion] profiling code with hotshot and Numeric/numpy/scipy/...

Ed Schofield schofield at ftw.at
Thu May 4 01:31:15 EDT 2006


Arnd Baecker wrote:
> Hi,
>
> I am trying to profile some code which I am converting from
> Numeric to numpy.
> However, the whole profiling seems to break down on the level of hotshot,
> depending on whether the code is run with Numeric/numpy or (old) scipy.
>
> For the attached test I get:
> - old scipy: all is fine!
> But all these fail
> - Numeric 24.2:
> - numpy version: 0.9.7.2256
> - scipy version: 0.4.8
>
> "Failing" means that I don't get a break-down on which routine takes how
> much time.
>
> First I would be interested whether someone else sees the same behaviour,
> or if we screwed up something with our installation.
>   

I've had trouble with this too.  I get more meaningful results using
prof.run('function()') instead of prof.runcall.  I wrote myself a little
wrapper function, which I'll include below.

But I'm still mystified why hotshot's runcall doesn't work ...

-- Ed


-----------------------


def profilerun(function, logfilename='temp.prof'):
    """A nice wrapper for the hotshot profiler.
    Usage:
        profilerun('my_statement')

    Example:
    >>> from scipy.linalg import inv
    >>> from numpy import rand
    >>> def timewaste(arg1=None, arg2=None):
    >>>     print "Arguments 1 and 2 are: " + str(arg1) + " and " +
str(arg2)
    >>>     a = rand(1000,1000)
    >>>     b = linalg.inv(a)
    >>>
    >>> profilerun('timewaste()')

    Example output:
             7 function calls in 0.917 CPU seconds

       Ordered by: internal time, call count

       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
            1    0.916    0.916    0.917    0.917 basic.py:176(inv)
            1    0.000    0.000    0.000    0.000
function_base.py:162(asarray_chkfinite)
            1    0.000    0.000    0.917    0.917 <ipython
console>:1(timewaste)
            1    0.000    0.000    0.000    0.000
__init__.py:28(get_lapack_funcs)
            1    0.000    0.000    0.000    0.000 _internal.py:28(__init__)
            1    0.000    0.000    0.000    0.000 numeric.py:70(asarray)
            1    0.000    0.000    0.000    0.000
_internal.py:36(__getitem__)
            0    0.000             0.000          profile:0(profiler)

    """
    prof = hotshot.Profile(logfilename)
    output = prof.run(function)
    print "Output of function is:"
    print output
    prof.close()
    stats = hotshot.stats.load(logfilename)
    stats.strip_dirs()
    stats.sort_stats('time', 'calls')
    stats.print_stats()







More information about the NumPy-Discussion mailing list