% Preamble
\documentclass[11pt,fleqn]{article}
\usepackage{amsmath, amsthm, amssymb}
\usepackage{fancyhdr}
\oddsidemargin	-0.25in
\textwidth	6.75in
\topmargin	-0.5in
\headheight	0.75in
\headsep	0.25in
\textheight	8.75in
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\fancyhf{}
\lhead{HW Chap. 4\\\ \\\ }
\rhead{Josh Holtrop\\2008-12-03\\CS 677}
\rfoot{\thepage}

\begin{document}

\noindent
\begin{enumerate}
\item[1.]{
    In store-and-forward communication, the communication cost is given by
    $$T_{\mathrm{comm}} = t_s + (t_h + mt_w)\ell = t_s + \ell t_h + \ell mt_w$$
    In cut-through routing, the communication cost is given by
    $$T_{\mathrm{comm}} = t_s + \ell t_h + mt_w$$
    Since the ``header'' is the only part of the communication that is
    encountering overhead for the $\ell$ links in the communication network,
    cut-through routing can save communication time on the order of
    $(\ell - 1) mt_w$.
    Obviously, this makes cut-through routing only advantageous on
    architectures with $\ell > 1$, meaning non-fully-connected networks.
}

\vskip 1em
\item[2.]{
    We are to transpose an $n \times n$ matrix that is initially
    rowwise block-decomposed among $p$ processes.
    Assume that $p \leq n$ and if any process $i$ owns $k > 1$ rows of
    the matrix, then the $k$ rows that it owns are contiguous.

    Then, the procedure to transpose the matrix is as follows:
    For each process $i$, a gather operation is performed.
    In this gather operation, each process $j$ sends to $i$ the $k$
    values it owns in column $i$ (where $k$ is the number of rows
    assigned to process $j$).
    Thus, at the end of each gather operation process $i$ has received
    the entire contents of column $i$ of the matrix.
    This algorithm takes $p \log p$ steps to complete.
}


\end{enumerate}

\end{document}
