Annotation of researchv10no/cmd/sml/doc/profiling, revision 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.