Annotation of researchv10no/cmd/sml/doc/profiling, revision 1.1.1.1

1.1       root        1: Execution Profiling
                      2: 
                      3: You can use the built-in ML execution profiler to find out where the
                      4: bottlenecks in your programs are.  The profiler will tell how much
                      5: time is spent in each function and how many calls were made to each
                      6: function.  In order to profile a set of functions, those functions must
                      7: be compiled in "profiling mode".
                      8: 
                      9: Here's how to use the profiler:
                     10: 
                     11: (1) System.Control.Profile.profiling := true;
                     12: 
                     13:     This tells the compiler to insert profiling hooks in the compiled code
                     14:     for any ML declarations that are compiled from now on, or until this
                     15:     flag is set back to false.
                     16: 
                     17: (2) compile some ML code, either by typing it in to the interactive
                     18:     system, or by means of the "use" function.
                     19: 
                     20: (3) System.Control.Profile.profileOn();
                     21: 
                     22:     This starts the timer interrupts that are used for statistical profiling.
                     23: 
                     24: (4) execute your program
                     25: 
                     26: (5) System.Control.Profile.profileOff();
                     27: 
                     28:     This turns off the timer interrupts.
                     29: 
                     30: (6) System.Control.Profile.report std_out;
                     31: 
                     32:     This prints a report of profiling information on your screen.  For
                     33:     each function you will be told what percentage of the time was spent
                     34:     in that function, how many calls were made, etc.  Instead of std_out
                     35:     you can call "report" with any outstream as an argument if, for
                     36:     instance, you want the report sent to a file.
                     37: 
                     38: Other commands:
                     39: 
                     40: System.Control.Profile.reset: unit -> unit
                     41: 
                     42:     The "reset" command sets all timing and call-count information to
                     43:     zero, but remembers which functions have been profiled.
                     44: 
                     45: System.Control.Profile.clear: unit -> unit
                     46: 
                     47:     The "clear" command tells the system to forget about profiling any
                     48:     functions that have been compiled so far, but allows you to compile
                     49:     and profile further functions.
                     50: 
                     51: Of course, the long names can be avoided by first opening the structure
                     52: System.Control.Profile.
                     53: 
                     54: A slightly simpler way to use the profiler is as follows (after having
                     55: opened System.Control.Profile):
                     56: 
                     57: (1) profiling := true;
                     58: (2) profileOn();
                     59: (3) compile and execute some ML code
                     60: (4) report std_out;
                     61: (5) repeat from step (3)
                     62: (6) when finished profiling, execute profileOff() and profiling := false
                     63: 
                     64: The batch compiler can also be made to generate object files with
                     65: profiling code by toggling the flag "profiling" to true, using the
                     66: command "^profiling".  We use this method to profile the compiler
                     67: itself.
                     68: 
                     69: For more details about the profiler, and to learn more tricks you can
                     70: make it do, read the paper "Profiling in the presence of optimization
                     71: and garbage collection" provided in the doc/papers directory.  Details
                     72: of the implemention have changed since that paper was written, but it
                     73: is still basically accurate.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.