15.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 14.1). In this
box model, predicates are entered though call, redo or resume ports,
and exited through exit, *exit, fail or leave ports. In addition, other
interesting events are indicated by ports as well (next, else, delay).
The usage is as follows:
This will print the results in a table like the following:
Compile your program in debug mode, as you would normally do during program development.
- Load the port_profiler library
- Run the query which you want to examine, using port_profile/2:
?- port_profile(queen([1,2,3,4],Out), ).
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 Reference Manual.
what are the most frequently called predicates (call ports)
- whether predicates failed unexpectedly (fail ports)
- whether predicates exited nondeterministically (*exit ports), i.e.
whether they left behind any choice-points for backtracking.
- whether nondeterministically exited predicates were ever re-entered
to find alternative solutions (redo ports).
- whether predicates did internal backtracking (next ports) in order
to find the right clause. This may indicate suboptimal indexing.
- how often predicates were delayed and resumed.