On Sat, 6 Sep 2014 11:52:33 -0700 (PDT)
Bill Hart <goodwillh...@googlemail.com> wrote:

> On Saturday, 6 September 2014 20:34:56 UTC+2, Robert Bradshaw wrote:
> >
> > Note that Cython supports cProfile these days: 
> > http://docs.cython.org/src/tutorial/profiling_tutorial.html
> > However, that won't help too much as the real missing pieces are
> > the calls from Cython into the various C libraries. 
> >
> > I'm also -1 to an approach that slows down all of Sage to track
> > this unconditionally. 
> 
> 
> I am also not comfortable with an approach that slows down the whole
> of Sage

Let me clarify a few points:

- the current (profiling) approach slows everything down when you turn
  it on.

  It simply turns on the profiler, which either logs _all_ function
  calls or periodically samples the running process and logs the active
  function in addition to loads of other data that is irrelevant for
  citations.

- the (decorator) approach suggested in #3317 [1] notes which
  implementation is being used only at the point it is used.

  [1] http://trac.sagemath.org/ticket/3317

  It would be simple to add a global switch to turn this logging on or
  off. We didn't think this was necessary because the overhead is
  incredibly small. See below for details.



Since the profiling approach is so slow, it can only be used on toy
examples which often use a completely different code path. I will copy
from my comment in #16854 [2]:

    The profiling approach is broken for several reasons:

    - the code used for different problem sizes is often different. 

      Profiling a small example will not give you the correct
      information. If you are really working on the cutting edge of
      what is computable, then you don't want to run the whole
      computation under the profiler once more.

    - you have to guess what is being used from the data obtained from
      the profiler. 

      There is no clean way to associate citation information to
      functions this way.

    - it does not allow tracking more fine grained information than
      function names. 

      If a Sage function wraps several algorithms by calling an
      external  package with different arguments, you cannot
      differentiate these. 


[2] http://trac.sagemath.org/ticket/16854#comment:6


Decorators & Speed:

We spent a lot of effort on speeding up the implementation in
#3317 and measuring the effect of adding citation information via
decorators.

IIRC, the only additional operation performed by the decorated function
is to add a string to a Python set. Compared to the overhead of calling
a function in Python, this is negligible.

There are some benchmarks in this blog post [3]. The title may give the
wrong idea, but the numbers are quite impressive. Note that we are not
suggesting to decorate arithmetic operations like addition and
multiplication, only calls to higher level routines, like groebner
basis computation or symbolic integration.

[3] http://sage-citation.blogspot.de/2011/08/awful-benchmarks.html

Here are some numbers from the link above:

- calling a pass-function (empty Python function):

  100000 loops, best of 3: 110 ns per loop

- calling the above function after decorating:

  100000 loops, best of 3: 295 ns per loop

- calling a pass-function, that takes some parameters:

  100000 loops, best of 3: 399 ns per loop

- calling the above function after decorating:

  100000 loops, best of 3: 796 ns per loop


This 200 ns difference would be a measuring error if the function in
question did any real work.


> , just so people like me and my colleagues can get more credit.

We suggest to cite not only libraries used by Sage but papers on the
algorithms used. See the example in the ticket description here:

http://trac.sagemath.org/ticket/3317

> Especially when we are trying to speed Sage up. :-)

I sincerely hope that you are not saying I am trying to "slow Sage
down." 

> > The decorator approach could be good for annotating 
> > functions (e.g. attaching them to some database the citations
> > module would use) but recording every call could be prohibitively
> > expensive. 

Let me emphasize again. We definitely do not want to recall every
function call. The goal is to add annotations to functions that
implement / wrap relatively expensive computational routines.



In short, I vote +1 for decorators.


Cheers,
Burcin


-- 
You received this message because you are subscribed to the Google Groups 
"sage-devel" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sage-devel+unsubscr...@googlegroups.com.
To post to this group, send email to sage-devel@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-devel.
For more options, visit https://groups.google.com/d/optout.

Reply via email to