ICS 446: Cluster Computing

ICS 446: Cluster Computing

 
Course Information
Class/Laboratory Schedule: 

Three 50 minutes lectures per week (3-0-3)

Designation: 
 Elective Course
Course Level: 
 Undergraduate
Prerequisites
Prerequisite(s) by Topic: 

Ability to write programs in C/C++ or Java

Basics of computer organization

Fundamental data structures

Principles of operating systems

Prerequisite Courses: 
Catalog Description: 

Introduction to high performance computing: types of parallel computers, system architectures, performance measures; Message passing programming; Complexity analysis of parallel algorithms; Embarrassingly parallel computations; Partitioning and divide-and-conquer strategies; Pipelined computations; Synchronous computations; Load balancing and termination detection; Programming with shared memory; Parallel sorting algorithms; Numerical algorithms; Parallel image processing; Searching and optimization; Project/Programmingassignments.

Textbook(s): 

Parallel Programming: Techniques and Applications Using Networked Workstations and Parallel Computers, Second Edition. By Barry Wilkinson and Michael Allen, Prentice-Hall, 2005.

Reference(s) and Other Material: 
  1. High Performance Cluster Computing: Architectures and Systems, Rajkumar Buyya (editor), Vol.1, ISBN 0-13-013784-7, Prentice Hall PTR, NJ, USA, 1999.
  2. High Performance Cluster Computing: Programming and Applications, Rajkumar Buyya (editor), Vol.2, ISBN 0-13-013785-5, Prentice Hall PTR, NJ, USA, 1999.
Course Outcomes: 
  • After completion of this course, the student shall be able to:

Describe the concept of high performance computing and various architectures of systems needed to implement it.

Explain problem areas where cluster computing can enhance performance.

Convert sequential algorithms for some problems to parallel.

Compare and contrast architectures for scientific and parallel computing recognizing the strengths and weaknesses of each.

Implement simple performance measurements for high-performance systems.

Design, code, test, debug and evaluate programs using techniques of numerical analysis, computer simulation, and scientific visualization.

Effectively use software tools including PVM and MPI for solving problems.

Identify problems where parallel programming can be used.

Communicate technical knowledge both oral and written

Topics Covered: 

Introduction to high performance computing

Embarrassingly Parallel Computations

Partitioning and Divide-and-Conquer Strategies

Pipelined Computations

Synchronous Computations

Load Balancing & Termination Detection

Programming with Shared Memory

Distributed Shared Memory Systems and Programming

Applications: Developing and Assessing Parallel Algorithms ​