[m-dev.] Deep Profiler: clique_proc_report and clique_proc_report_dynamic

Paul Bone pbone at csse.unimelb.edu.au
Tue Feb 10 14:29:01 AEDT 2009

Hi Zoltan.

The clique report structures in the deep profiler look like this:

:- type clique_report
    --->    clique_report(
                % The clique the report is for.
                cr_clique_ptr               :: clique_ptr,
                % The ancestor call sites of the clique,
                % - from the innermost ancestor call site (in the parent)
                % - to the outermost ancestor call site (in main/2).
                cr_ancestor_call_sites      :: list(
                % Reports for every procedure in the clique.  The first
                % procedure in the list is the entry procedure (if the parent
                % clique had a valid CSD.) and that CSD was found in the
                % clique.  TODO: we might want to express this within this
                % type.
                cr_clique_procs             :: list(clique_proc_report)

:- type clique_proc_report
    --->    clique_proc_report(
                % Summary information for the cost of this procedure in this
                % clique.
                cpr_proc_summary            :: perf_row_data(proc_desc),

                cpr_first_proc_dynamic      :: clique_proc_dynamic_report,
                cpr_other_proc_dynamics     :: list(clique_proc_dynamic_report)

:- type clique_proc_dynamic_report
    --->    clique_proc_dynamic_report(
                % Summary information for the cost of this proc _dynamic
                % in this clique.
                cpdr_proc_summary            :: perf_row_data(proc_desc),

                % Information about the costs of the call sites in this
                % procedure in this clique.
                cpdr_call_sites              :: list(clique_call_site_report)

Why is there both a clique_proc_report and clique_proc_dynamic_report
structure here?  And why does the clique_proc_report structure refer to
one or more clique_proc_dynamic_report structures?  I would have thought
that all procs that are part of the clique tree would have been proc
dynamics.  And that if we wished to share memory we would have had each
one refer to static procedure data as follows:

   Clique 1---->* Proc Dynamic 1------->* Call Site Dynamic
                     | N                        | N
                     |                          |
                     v M (N >= M)               v M (N >= M)
                  Proc Static               Call Site Static

I've indicated the cardinality for each relation.  I haven't drawn a
relation between proc statics and call site statics but there may be

If the clique_proc_report structures refer to static procedures how
should the profiling data in clique_proc_report and
clique_proc_dynamic_report be interpreted?


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mercurylang.org/archives/developers/attachments/20090210/b0500e30/attachment.sig>

More information about the developers mailing list