[ library(profile) | Reference Manual | Alphabetic Index ]

# profile(+Goal, ++Options)

Execute Goal (once) and print the time spent in each predicate.

Goal
  Callable term
Options
  List of options

## Description

Runs the given goal with the sampling profiler, which collects information about the currently executing predicate 100 times per second. After the goal finishes, a result table is printed.

ECLiPSe must have been started with the -P command line option (or equivalent) in order to support profiling. It is, however, not necessary to compile the profiled code in a particular way; the profiler works independently of compiler optimizations and debug mode.

Possible options:

keep_file
  don't destroy the samples file <tmp_dir>/eclipse.prof.<pid> that is used to collect profiling information during execution. Without this option, the file is automatically deleted.

Notes:

- Garbage collection time is shown as predicate garbage_collect/0, even when garbage collection was automatically triggered.
- The time spent in simple predicates (i.e. those with call_type external, written in C) is counted towards their parent predicate.
- In cases where the predicate name is not available, e.g. local goals in a locked module, the information is grouped under a blank predicate name entry for the module.

### Modes and Determinism

- profile(+, ++) is det

### Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

## Examples

    ?- profile(length(_,100000000), []).

    		  PROFILING STATISTICS
    		  --------------------
    Goal:		  length(_80, 100000000)
    Result:		  success
    Sampling rate:	  every 0.01s process_cputime
    Samples taken:	  182
    Thread cputime:	  1.82s

    Predicate	      Module	    %Time    Time   %Cum
    ---------------------------------------------------------
    length            /2  sepia_kernel  79.7%    1.45s  79.7%
    garbage_collect   /0  sepia_kernel  20.3%    0.37s 100.0%

    Yes (1.86s cpu)

## See Also

get_flag / 2, profile / 1