Profiling experiments were performed with a variety of computations for both time and memory usage. The graph in figure 7.4 is an automatically generated summary of a profiling report generated using the Glasgow Haskell Compiler. The profiler also produces textual reports.
The graph shows the amount memory used by different functions against
time. The function sbIntDiv
performs division of a signed
binary stream by an integer and
sbAv
is the signed binary stream average operation. The calculation performed here is computation of ln(2) to a
precision of 20 decimal digits.
In this example, the profiler shows that the majority of the memory is consumed during the signed binary stream average and division by an integer operations.
This and other experiments show that the majority of the time and memory are consumed in functions like the signed binary average, division of a signed binary stream by an integer, and a few other basic operations. This is not in itself surprising as this operation is used extensively in almost all other algorithms. It suggests, however, that the majority of the execution time is spent in a very small portion of the code, and that significant performance gains might be obtained by optimising a relatively small amount of the implementation.