\documentclass[10pt]{article}
\usepackage{../pplmanual}
\input{../pplmanual}

\title{BigSim Parallel Simulator for Extremely Large Parallel Machines}
\version{1.01}
	\credits{The Charm++ BigSim Emulator was developed by Arun Singla,
Neelam Saboo and Joshua Unger under the guidance of Prof. L. V. Kale. The new
Converse BigSim Emulator was completely rewritten by Gengbin Zheng. The
Converse BigSim Emulator is the only version under maintenance now. Charm++ and
Adaptive MPI (AMPI) were ported onto the BigSim Emulator by Gengbin Zheng. The
parallel performance simulator was developed by Gengbin Zheng and Gunavardhan
Kakulapati. A postmortem network simulator was developed by Terry Wilmarth,
Eric Bohm and Gengbin Zheng}

\begin{document}
\maketitle

\section{Introduction}

%One approach for building the next generation of parallel computers
%is based on large aggregates of multiprocessor chips with support
%for hardware multithreading. 
%An initial design for IBM's Blue Gene/C project exemplifies this approach.
%Blue Gene/C was a proposed one million processor machine from IBM.

Parallel machines with an extremely large number of processors are now
being designed and built. For example, the BlueGene/L (BG/L) machine
built by IBM has 64,000 dual-processor nodes with 360 teraflops of
peak performance. Another more radical design from IBM,
code-named Cyclops (BlueGene/C), had over one million floating point units,
fed by 8 million instructions streams supported by individual thread units,
targeting 1 petaflops of peak performance.


It is important that one can study the programming issues and performance
of parallel applications on such machines even before the machine is built.
Thus, we have developed a parallel simulator -- BigSim, to facilitate this research.

Since our research was initiated by the BlueGene/C project, in previous
editions of this manual we also called our simulator as Blue Gene Simulator.
Our simulator is capable of simulating a broad class of "Massively Parallel
Processors-In-Memory", or MPPIM machines. 

\subsection{Simulator system components}

Our simulator system includes these components: 
\begin{enumerate}
\item a parallel emulator which emulates a low level machine API targeting an architecture like BlueGene; 
\item a message driven programming language (Charm++) running on top of the emulator; 
\item the Adaptive MPI (an implementation of MPI on top of Charm++) environment; 
\item a parallel post-mortem mode simulator for performance prediction, including network simulation. 
\end{enumerate}

\subsection{History}
	The first version of the BlueGene emulator was written in Charm++, a
parallel object language, in fall 2001.  The second version of the BlueGene
emulator was completely rewritten on top of Converse instead of Charm++ in
spring 2002.  While the API supported by the original emulator remains almost
the same, many new features were added.
% - support of thread-committed messages that 
%can be send to a specific thread in a Blue Gene node; support of Blue Gene
%node level broadcast.
The new emulator was implemented on a portable low layer communication library
- Converse, in order to achieve better performance by avoiding the cross layer
overhead.
%Another advantage is that the lighter weighted emulator makes it easier to
%port higher level of programming language onto the emulator.

	Charm++ was ported to the emulator in 2002, providing the first
parallel language model on top of the emulator.

A performance simulation capability was added to the emulator in spring 2003.
The new simulator was renamed to BigSim at the same time.
During the same year, we developed a POSE-based postmortem mode network
simulator called BigNetSim. In fall 2006, we renamed BigNetSim as simply
BigSim simulator.

In the following sections, we will first describe how to download and compile
the BigSim system (Section~\ref{install}). Section~\ref{bgemulator} describes
the BigSim Emulator and the low level machine API in detail. 


\input{install}

\input{emulator}

% \input{simulator}

\input{interpolation}

\input{bgapi}

\input{index}

\end{document}

