Timing compilation

2018-12-05 Thread Didier Verna


  Hello,

I would like to collect information about the time it takes to compile
an ASDF system (possibly also load it), dependencies excluded. I'm
thinking there's probably a way to do this by :around'ing compile-op, or
something like that, but if someone already has a clear view on how to
make this happen, I'd be grateful for the time spared!

Thanks.

-- 
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, Aïkido: http://www.didierverna.info



Re: Timing compilation

2018-12-05 Thread Faré
>   Hello,
>
> I would like to collect information about the time it takes to compile
> an ASDF system (possibly also load it), dependencies excluded. I'm
> thinking there's probably a way to do this by :around'ing compile-op, or
> something like that, but if someone already has a clear view on how to
> make this happen, I'd be grateful for the time spared!
>
Simplest  method:
1- load the dependencies, possibly using (asdf:operate :prepare-op s)
2- (time (asdf:make s))

—♯ƒ • François-René ÐVB Rideau •Reflection• http://fare.tunes.org
I used to like the government, but that was before it got big and popular.



Re: Timing compilation

2018-12-05 Thread Robert Goldman

On 5 Dec 2018, at 10:04, Didier Verna wrote:


"Robert Goldman"  écrivait:


Depending on the host lisp you are using, couldn't you wrap the calls
to COMPILE-FILE and LOAD in code that times those operation?


  I could, but since I want per-library numbers, I would need to
  reconstruct that information afterwards...


Yes, I am afraid that is correct.

This is yet another problem that comes from the fact that the build 
plans are linear, instead of hierarchical -- for example there's no 
subsequence that is identifiable as being the set of operations for a 
particular `module`.


Logically speaking, there's a tree structure in the build process that 
is what you need, but I don't believe that there are any facilities in 
ASDF to recover that tree structure.


This may be the best you can do.

R

Re: Timing compilation

2018-12-05 Thread Didier Verna
"Robert Goldman"  écrivait:

> This is yet another problem that comes from the fact that the build
> plans are linear, instead of hierarchical -- for example there's no
> subsequence that is identifiable as being the set of operations for a
> particular module.
>
> Logically speaking, there's a tree structure in the build process that
> is what you need, but I don't believe that there are any facilities in
> ASDF to recover that tree structure.
>
> This may be the best you can do.

  I think I'll go with Faré's suggestion, scripting it for every library
  and changing the cache directory every time.

-- 
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, Aïkido: http://www.didierverna.info



Re: Timing compilation

2018-12-05 Thread Didier Verna
François-René ÐVB Rideau écrivait:

> Simplest  method:
> 1- load the dependencies, possibly using (asdf:operate :prepare-op s)
> 2- (time (asdf:make s))

  Nice, thank you. If I want to time separately the compilation and
  loading phases of several libraries (which may depend on each other)
  however, I would need to restart my session every single time. Another
  way to do this and, say, report the timings to a file?

-- 
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, Aïkido: http://www.didierverna.info



Re: Timing compilation

2018-12-05 Thread Robert Goldman

On 5 Dec 2018, at 9:46, Didier Verna wrote:


François-René ÐVB Rideau écrivait:


Simplest  method:
1- load the dependencies, possibly using (asdf:operate :prepare-op s)
2- (time (asdf:make s))


  Nice, thank you. If I want to time separately the compilation and
  loading phases of several libraries (which may depend on each other)
  however, I would need to restart my session every single time. 
Another

  way to do this and, say, report the timings to a file?

--
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, Aïkido: http://www.didierverna.info


Depending on the host lisp you are using, couldn't you wrap the calls to 
`COMPILE-FILE` and `LOAD` in code that times those operation?


You could use dynamic variables bound inside the calls to `PERFORM	` to 
ensure you collect only the information you need, and not other calls to 
those functions that happen to occur.


In ACL you could use function wrappers (`fwrap`) and SBCL has a similar 
feature whose name I can't recall at the moment.


Best,
R


Re: Timing compilation

2018-12-05 Thread Didier Verna
"Robert Goldman"  écrivait:

> Depending on the host lisp you are using, couldn't you wrap the calls
> to COMPILE-FILE and LOAD in code that times those operation?

  I could, but since I want per-library numbers, I would need to
  reconstruct that information afterwards...

-- 
Resistance is futile. You will be jazzimilated.

Lisp, Jazz, Aïkido: http://www.didierverna.info