Skip to content

Latest commit

 

History

History
76 lines (47 loc) · 1.81 KB

demo-profiling.rst

File metadata and controls

76 lines (47 loc) · 1.81 KB

A micro demo of profiling Sage / Python code (draft)

.. MODULEAUTHOR:: Nicolas M. Thiéry <nthiery at users.sf.net>

This is a brief demo presented at Sage Days 86. See also :ref:`profiling`.

We will analyze the performances of integer partitions of 45. Here is how many of them there are:

sage: P = Partitions(45)
sage: P.cardinality()
89134

The next command measures how much time it takes to list them all. Before running it, try to estimate the result:

sage: %time x = list(P)
CPU times: user 1.95 s, sys: 40 ms, total: 1.99 s
Wall time: 1.94 s

One can get statistics on how much time is used in each subfunction call:

sage: %prun x = list(P)

This is not so easy to analyze. A graphical visualization would be much nicer!

Graphical visualization with snakeviz

Installation:

sage -pip install snakeviz

This works locally only; we can hope for a tighter integration in the notebook in the long run.

We now load the extension in the notebook:

sage: %load_ext snakeviz

Let's use it:

sage: %snakeviz x = list(P)
*** Profile stats marshalled to file u'/tmp/...'.

Graphical visualization with runsnake

I find the output easier to interpret with runsnake; but this may just be a bias from having used it quite some. On the other hand it is not integrated in the browser and harder to install.

Installation on Linux:

sage: apt install runsnakerun

For other systems, see the web page.

Let's use it:

sage: runsnake("list(P)")
.. TODO::

    Add a demo of using the Python debugger to trace through the code.