Introduction to Parallel Computing for Scientific Applications

    Term: Spring 2006
    Course: CIS/MEAM 521
    Day/Time: Mondays & Wednesdays 3:00--4:30 PM, Towne 321

    Instructor

    George Biros email: biros@seas.upenn.edu

    Class description

    From numerical weather prediction and earthquake simulations, to quantum mechanics, and to genome sequencing and molecular dynamics, high-performance computing (HPC) is a fundamental tool for science. The basic principles on how to design, implement, and evaluate HPC techniques will be covered. Topics include parallel non-numerical and numerical algorithms, computing platforms, and message passing interface. Science applications will sample techniques applied to partial differential equations, many-body problems, and statistical physics. Practical problem-solving and hands-on examples will be a basic part of the course.

    Topics covered:
    - Networks, communications, load balancing, data locality, overlapping communication/computation
    - Models: Work-Depth, PRAM, BSP
    - Programming: Message Passing Interface, OpenMP
    - Non-numerical algorithms: reduction, sorting, searching, pointer jumping, trees, graph partitioning
    - Numerical algorithms: N-body Barnes-Hut, FFT, Path following, deterministic Monte Carlo
    - Applications: elliptic PDEs, data mining, molecular dynamics

    Grading

    10 homeworks, one take-home midterm and one individual project. This course does not have a final exam.

    Textbook

    • Ananth Grama, George Karypis, Vipin Kumar, Anshul Gupta, ``An Introduction to Parallel Computing: Design and Analysis of Algorithms'', Second Edition, 2003

    Recommended books:

  • Joseph Jaja, "Introduction to Parallel Algorithms",
  • Gropp et al, ``The Sourcebook of Parallel Computing''
  • Ian Foster, ``Designing and Building Parallel Programs : Concepts and Tools for Parallel Software Engineering''
  • Thomson F. Leighton, ``Introduction to Parallel Algorithms and Architectures: Arrays, Trees, Hypercubes''
  • Gropp & Snir, ``MPI: The Complete Reference''

    Prerequisites

    Programming. Familiarity with Linux or Unix will help.