UD Home
CIS Home
Search
Contact
Welcome Research Undergraduate Graduate Resources People

CISC 372: Parallel Programming

Catalog Description:
Introduction to parallel programming concepts, methodologies, and tools. Programming techniques for programs that contain code segments which will run simultaneously on multiple processors. Topics include: concurrency, program decomposition, data distribution, communication, load balancing, scalability, locality, granularity, debugging, performance evaluation.

Current Text:
Parallel Programming with MPI
Peter S. Pacheco
Morgan Kaufmann Publishers, 1997

Goals:
At the end of this course, the student should be able to:

  • DESCRIBE the major functions and approaches used in a large scientific program, through program inspection and research on an application domain
  • APPLY commercially available profiling tools to identify the regions of a large time-consuming program that are most conducive to increased performance through parallelization
  • SELECT and apply appropriate parallelization constructs to a large program to create a correct parallel version to exploit a state-of-the-art parallel computing environment
  • ASSESS the correctness of a parallel program
  • APPLY available debugging methods to detect and correct errors in an erroneous parallel program
  • ASSESS the performance of parallel programs run with different parameters of input sizes and numbers of processors
  • VERBALLY AND ORALLY CRITIQUE a parallelization effort and its resulting performance results to non-experts
  • COORDINATE and cooperatively participate in a team similar to industrial and government research labs working on a realistic program parallelization problem

Content:

  • Introduction - What is parallel computing?
  • Overview of parallel architectures and parallel programming models
  • How do I write a simple parallel program?
  • The MIMD and SPMD models
  • What are the problems unique to parallel programs?
  • How do I deal with these problems?
  • How do I debug parallel programs?
  • How do I measure the goodness of my parallel program?
  • The process of designing good parallel programs:
    • How do I break up the problem?
    • Some basic techniques of parallel algorithm design
    • How do I get processes to pass data around in effective ways?
    • How much overhead have I created for the sake of parallelism?
    • How can I improve the parallel program in terms of communication overhead?
MPI Concepts:
  • Basic Send and Recv
  • Collective Communication
  • Communicators and Groups
  • Topologies
  • Derived Data Types
  • Advanced Point-to-Point Communication
  • Timing and Profiling MPI Programs

Prerequisites:
CISC 220 Data Structures



Department of Computer & Information Sciences
103 Smith Hall | Newark, DE 19716
- email webmaster -