\documentstyle[lslide,a4wide]{harticle}

\title{Performance Analysis}
\author{±Ç ¹ü ÁØ}
\organization{SPARCS} 
\date{1993³â 7¿ù 27ÀÏ}

\addtolength{\textheight}{-0.5in}
\verttop
\shadowframe

\newenvironment{example}{\begin{normalsize} \begin{center} \begin{tabular}{|c|} \hline \\ \begin{minipage}{12cm}}{\end{minipage} \\ \\ \hline \end{tabular} \end{center} \end{normalsize}}
\newenvironment{smallexample}{\begin{small} \begin{center} \begin{tabular}{|c|} \hline \\ \begin{minipage}{12cm}}{\end{minipage} \\ \\ \hline \end{tabular} \end{center} \end{small}}

\begin{document}

\titlepage

\begin{slide}
\subsection{{\tt time}}

\begin{itemize}
    \item Display Time Used by a Program
\end{itemize}

\begin{example}
\begin{verbatim}
% time index.assist < index.entries > /dev/null
13.5u 0.8s 0:15 92% 3+19k 19+1io 0pf+0w
\end{verbatim}
\end{example}
\vspace{5mm}

\begin{itemize}
    \begin{itemize}
        \item user time --- ÇÁ·Î±×·¥ ½ÇÇà¿¡¸¸ °É¸° ½Ã°£
        \item system time --- ¿î¿µÃ¼Á¦¿¡¼­ ÇÒ¾ÖÇÑ ½Ã°£
        \item elapsed time --- ½ÇÁ¦ ÇÁ·Î±×·¥ ½ÃÀÛºÎÅÍ Á¾·á±îÁöÀÇ ½Ã°£
    \end{itemize}
\end{itemize}
\vspace{5mm}

\begin{itemize}
    \item Effects of Optimizer on Timing
\end{itemize}

\begin{example}
\begin{verbatim}
% time index.assist < index.entries > /dev/null
13.1u 1.4s 0:38 37% 3+19k 19+0io 1pf+0w
\end{verbatim}
\end{example}
\vspace{5mm}

\begin{itemize}
    \item Controlling Display
    \begin{itemize}
        \item {\tt time} variable
    \end{itemize}
\end{itemize}

\begin{example}
\begin{verbatim}
set time=3
set time=(3 "%E %P")
\end{verbatim}
\end{example}
\end{slide}

\begin{slide}
\begin{itemize}
    \item Control key
\end{itemize}

\begin{Smallsize}
\begin{center}
\begin{tabular}{|ll|}
\hline
{\bf Letter} & {\bf Description} \\
\hline
{\tt D} & unshared data space average (kb) \\
{\tt E} & elapsed time (sec) \\
{\tt F} & page faults \\
{\tt I} & number of block input \\
{\tt K} & unshared stack space average (kb) \\
{\tt M} & maximum real memory used \\
{\tt O} & number of block output \\
{\tt P} & total CPU time / elapsed time (\%) \\
{\tt S} & system time \\
{\tt U} & user time \\
{\tt W} & number of swaps \\
{\tt X} & shared memory average \\
\hline
\end{tabular}
\end{center}
\end{Smallsize}

\begin{itemize}
    \item C shell {\tt time} vs {\tt /bin/time}
\end{itemize}

\begin{example}
\begin{verbatim}
% echo timing a pipeline | time cat
timing a pipeline
\end{verbatim}
\end{example}

\begin{example}
\begin{verbatim}
% echo timing a pipeline | /bin/time cat
timing a pipeline
        0.8 real        0.0 user                0.1 sys
\end{verbatim}
\end{example}
\end{slide}

\begin{slide}
\subsection{{\tt prof}}

\begin{itemize}
    \item Generate Profile of a Program
    \begin{itemize}
        \item finer level
        \item next step after simple timing
        \item compile for profiling --- {\tt -p} option
        \item result file --- {\tt mon.out}
        \item interprete results --- {\tt prof}
    \end{itemize}
\end{itemize}

\begin{example}
\begin{verbatim}
% index.assist < index.entries > /dev/null
% prof index.assist
 %time  cumsecs  #call  ms/call  name
  19.4     3.28  11962     0.27  _compare_strings
  15.6     5.92  32731     0.08  _strlen
  12.6     8.06  4579      0.47  __doprnt
  10.5     9.84                  mcount
   9.9    11.52  6849      0.25  _get_field
                      :
                      :
\end{verbatim}
\end{example}
\vspace{5mm}

\begin{itemize}
    \item Interpreting Profile Display
    \begin{itemize}
        \item total run time percentage
        \item ´©ÀûµÈ ½ÇÇà ½Ã°£
        \item ½ÇÇà È¸¼ö
        \item ÇÑ ¹ø ½ÇÇà½Ã ¼Ò¿ä ½Ã°£
        \item ÇÔ¼ö ÀÌ¸§
    \end{itemize}
\end{itemize}
\end{slide}

\begin{slide}
\subsection{{\tt gprof}}

\begin{itemize}
    \item Generate a Call Graph Profile
    \begin{itemize}
        \item not sufficient to point out exactly?
        \item compile --- {\tt -pg} option
        \item result --- {\tt gmon.out}
        \item interprete --- {\tt gprof}
    \end{itemize}
\end{itemize}

\begin{smallexample}
\begin{verbatim}
                              called/total      parents
index %time  self descendents called+self   name           index
                              called/total      children

-----------------------------------------------

             0.00       14.47      1/1          start [1]
[2]    98.2  0.00       14.47      1        _main [2]
             0.59        5.70    760/760        _insert_index_entry [3]
             0.02        3.16      1/1          _print_index [6]
             0.20        1.91    761/761        _get_index_terms [11]
             0.94        0.06    762/762        _fgets [13]
             0.06        0.62    761/761        _get_page_number [18]
             0.10        0.46    761/761        _get_page_type [22]
             0.09        0.23    761/761        _skip_start [24]
             0.04        0.23    761/761        _get_index_type [26]
             0.07        0.00    761/820        _insert_page_entry

-----------------------------------------------

                                10392            _insert_index_entry [3]
             0.59        5.70    760/760        _main [2]
[3]    42.6  0.59        5.70    760+10392  _insert_index_entry [3]
             0.53        5.13  11152/11152      _compare_entry[4]
             0.02        0.01     59/112        _free [38]
             0.00        0.00     59/820        _insert_page_entry [34]
                               10392            _insert_index_entry [3]

-----------------------------------------------
\end{verbatim}
\end{smallexample}
\end{slide}

\begin{slide}
\subsection{{\tt tcov}}

\begin{itemize}
    \item Statement-Level Analysis
    \begin{itemize}
        \item code coverage
        \item dead code, not tested
        \item compile --- {\tt -a} option
        \item result --- {\tt .d} file
        \item interprete --- {\tt tcov} command
        \item report --- {\tt .tcov} file
    \end{itemize}
\end{itemize}

\begin{smallexample}
\begin{verbatim}
                struct index_entry *
        insert_index_entry(node, entry)
11152 ->        struct index_entry *node;
                struct index_entry *entry;
        {
                int result;
                int level;

                result = compare_entry(node, entry);

                if (result == 0) {         /* exact match */
   59 ->                insert_page_entry(node, entry->page_entry);
                        free(entry);
                        return(node);
                }

11093 ->        if (result > 0)
 3956 ->                if (node->lesser != NULL)
 3626 ->                     insert_index_entry(node->lesser, entry);
                        else {
  330 ->                        node->lesser = entry;
                                return (node->lesser);
                        }
                else
 7137 ->                if (node->greater != NULL)
 6766 ->                     insert_index_entry(node->greater, entry);
                        else {
  371 ->                        node->greater = entry;
                                return (node->greater);
                        }
        }
\end{verbatim}
\end{smallexample}
\vspace{5mm}

\begin{itemize}
    \item {\tt tcov} Summary
\end{itemize}

\begin{example}
\begin{verbatim}
        Top 10 Blocks

        Line        Count

         240        21563
         241        21563
         245        21563
         251        21563
         250        21400
         244        21299
         255        20612
         257        16805
         123        12021
         124        11962


    77   Basic blocks in this file
    55   Basic blocks executed
 71.43   Precent of the file executed

        439144   Total basic block execution
       5703.17   Average executions per basic block
\end{verbatim}
\end{example}
\end{slide}

\begin{slide}
\subsection{{\tt indent}}

\begin{itemize}
    \item C Program Formatter
\end{itemize}

\begin{example}
indent {\em input-file} ({\em output-file}) ({\em options})
\end{example}

\begin{itemize}
    \item Options
    \begin{description}
        \item [-bap, -nbap] blank line after procedure body
        \item [-bad, -nbad] blank line after declaration
        \item [-bc, -nbc] new line after each comma in a declaration
        \item [-br, -bl] change style of compound statement
    \end{description}
\end{itemize}

\begin{example}
\begin{verbatim}
if (...)
{
        code
}
\end{verbatim}
\end{example}

\begin{example}
\begin{verbatim}
if (...) {
        code
}
\end{verbatim}
\end{example}

\begin{itemize}
    \begin{description}
        \item [-c{\em n}] position of comments on code
        \item [-cdb, -ncdb] style of comment on blank lines
    \end{description}
\end{itemize}

\begin{example}
\begin{verbatim}
/*
 * this is a comment
 */
\end{verbatim}
\end{example}

\begin{example}
\begin{verbatim}
/* this is a comment */
\end{verbatim}
\end{example}

\begin{itemize}
    \begin{description}
        \item [-i{\em n}] the number of spaces for one tab
        \item [-l{\em n}] maximum length of an output line
    \end{description}
\end{itemize}
\vspace{15mm}

\subsection{{\tt cb}}

\begin{itemize}
    \item A Simple C Program Beautifier
    \item Options

	\begin{Smallsize}
	\begin{center}
   	\begin{tabular}{ll}
       	{\bf -j}            & join \\
       	{\bf -s}            & standard C style \\
       	{\bf -l {\em leng}} & split lines longer than {\em leng} \\
   	\end{tabular}
	\end{center}
	\end{Smallsize}
\end{itemize}

\end{slide}
\end{document}
