The first step is to run futharkbench on your program, while passing --profile and --json. This will
produce a JSON file containing runtime measurements, as well as collected profiling information. If you
neglect to pass --profile, the profiling information will be missing. The information in the JSON file is
complete, but it is difficult for humans to read.
The next step is to run futharkprofile on the JSON file. For a JSON file prog.json, this will create a
topleveldirectoryprog.prof that contains files with human-readable profiling information. A set of
files will be created for each benchmark dataset. If the original invocation of futharkbench included
multiple programs, then futharkprofile will create subdirectories for each program (although all inside
the same top level directory).
You can pass multiple JSON files to futharkprofile. Each will produce a distinct top level directory.
Filesproduced
Supposing a dataset foo, futharkprofile will produce the following files in the top level directory.
• foo.log: the running log produced during execution. Contains many details on dynamic behaviour,
depending on the exact backend.
• foo.summary: a summary of memory usage and cost centres. For the GPU backends, the cost centres are
kernel executions and memory copies.
• foo.timeline: a list of all recorded profiling events, in the order in which they occurred, along with
their runtime and other available information
Technicalities
The profiling information, including the log, is collected from a final run performed after all the
measured runs. Profiling information is not collected during the runs that contribute to the runtime
measurement reported by futharkbench. However, enabling profiling may still affect performance, as it
changes the behaviour of the run time system.
Rawreports
Alternatively, the JSON can also contain a raw profiling report as produced by the C API function
futhark_context_report(). A directory is still created, but it will only contain a single set of files,
and it will not contain a log.