\section*{Purdue University}
The Department of Computer Science offers the following
courses.

\begin{itemize}
\item
CS 590V:  Parallel and Vector Computations.

This course studies the experimental and theoretical
evaluation of architectures, algorithms and software systems
for high speed computation.  The topics covered include:  Cray system
organization and instructions set analysis, bus and distributed memory
architectures, massively parallel systems and transputer boards,
mapping and allocation algorithms, linear system solvers, PDE solvers,
combinatorial and graph algorithms, parallel back-propagation and
neural networks, parallel and vector extensions of procedural
languages, automatic parallelization methods, parallel data-flow and
functional languages, performance evaluation, debugging and monitoring
tools, ELLPACK, SIMPLEX, PARAGRAPH.  Programming projects to provide
hands on experience on several machines are available.

\item
CS650: Computational Aspects of Parallel Processing.

This course focuses on the design and implementation of parallel
algorithms on different parallel models,
the theory of parallel computation, and other theoretical issues.
The focus is on general paradigms,
with specific algorithms covered to illustrate important
general principles.
Topics include parallel models of computation, including PRAMs,
arrays, meshes, and trees, simulation results, parallel algorithm
design techniques, an introduction to parallel complexity theory,
lower bound techniques, processor-time and area-time tradeoffs,
and VLSI layout techniques.
\end{itemize}

\noindent The Electrical Engineering School introduces aspects
of parallelism in its dual-level (advanced undergraduate / graduate)
course in Computer Architecture.  In addition, the following graduate-level
courses are offered (EE 595S is a dual-level course).

\begin{itemize}

\item
EE 595S:  Programming Parallel Machines.

This course studies how to program parallel processing
systems.  Three types of parallel architectures are considered:
SIMD (synchronous), MIMD (asynchronous), and mixed-mode (SIMD/MIMD
hybrid).  A variety of machines that represent these classes are used
in the course.

\item
EE 666:  Advanced Computer Systems.

This course studies theoretical aspects of advanced computer
systems where multiprocessing is used.  Topics include the design,
architecture, and performance evaluation of multiprocessor memories,
interconnection networks, and computation pipelines.  Also included are
the topics of scheduling, synchronization, resource allocation,
load-balancing, partitioning, and deadlock avoidance in
multiprocessors.  Also covered are the design and analysis of
parallel algorithms, programming languages, and automatic approaches to
parallelism detection/exploitation for concurrent computation.


\item
EE 667:  Parallel Processing.

The design of large-scale parallel processing systems is
studied.  Synchronous (SIMD) and asynchronous (MIMD) machine
organizations are discussed.  Single-stage and multistage
interconnection networks for such systems are examined in depth.  Case
studies of existing and proposed systems are presented.


\item
EE 660:  Parallel Algorithms.

The purpose of this course is to introduce students to the
fundamental theory of parallel algorithms and to explore parallel
algorithm principles via the study of important example algorithms.


\item
EE 663:  Compiler Coder Generation, Optimization, and Parallelization.

This course presents the concepts needed to design and
implement production quality code generators for any of the the more
popular languages and families of computer architecture, including
various pipelined and macro-parallel machines.  Flow analysis and
concurrency detection, as well as optimizations and loop and irregular
code parallelizations, are covered in detail.

\item
EE 695A:  Parallel and Distributed Computation for Optimization and
Control.

The purpose of the course is to introduce techniques for solving
large-scale optimization and control problems in a parallel / distributed
computing environment.  Emphasis is placed on design and analysis of
distributed numerical algorithms for nonlinear problems.  The issue
of synchronous versus asynchronous computation is an underlying theme
throughout the course.

\item
EE 695F:  Algorithm-Specific Parallel Processing.

An introduction to the theory and fundamental techniques for
the design of algorithmically specialized computing structures.  The
course provides a rigorous framework for modeling and transforming
algorithms in order to derive optimal space/time mappings of
algorithms into VLSI architectures and/or parallel processors.
Applications of the course content include high-level VLSI design and
optimizing compilers.


\item
EE 695G:  Distributed Computing Systems.

This course discusses the design issues of distributed
computing systems (DCS).  The general theory of distributed
transaction management, reliability, and resource management is
discussed.  Various algorithms and specification methodologies for DCS
are introduced.  A general coverage of three major areas of DCS,
namely:  distributed operating systems, distributed databases, and
distributed AI, is provided.  The discussion is augmented with various
case studies.
\end{itemize}
