Previous Up Next

16.7  Port Profiler

The port profiler is a performance analysis tool based on the idea of counting of events during program execution. The events that are counted are defined in terms of the “box model” of execution (the same model that the debugger uses, see chapter 15.1). In this box model, predicates are entered though call, redo or resume ports, and exited through exit, *exit, fail or leave ports. Some other interesting events are indicated by ports as well (next, else, delay).

The usage is as follows:

  1. Compile your program in debug mode, as you would normally do during program development.
  2. Load the port_profiler library
  3. Run the query which you want to examine, using port_profile/2:
    ?- port_profile(queen([1,2,3,4],Out), []).
    

This will print the results in a table like the following:

PREDICATE       CALLER               call     exit     fail    *exit     redo
-           /3  nodiag      /3         46       46        .        .        .
=\=         /2  nodiag      /3         46       45        1        .        .
qperm       /2  qperm       /2         30       28        .       16       14
qdelete     /4  qperm       /2         20       18        .       12       10
nodiag      /3  nodiag      /3         17       14        3        .        .
nodiag      /3  safe        /1         17        7       10        .        .
+           /3  nodiag      /3         17       17        .        .        .
qdelete     /4  qdelete     /4         10        9        .        3        2
qperm       /2  queen       /2          1        .        .       11       10
safe        /1  queen       /2         11        1       10        .        .
safe        /1  safe        /1          7        4        3        .        .
queen       /2  trace_body  /2          1        .        .        1        .

Each row of the table shows the information for a particular predicate (by default split according to different caller predicates). The table is sorted according to entry port count (call+redo+resume). The port counts give information about:

For more details about different options and output formats, see the description of port_profiler in the Reference Manual.


Previous Up Next