Parallel Computing in the Computer Science Curriculum part of Parallel Computing in the Computer Science Curriculum
CS in Parallel (supported by a grant from NSF-CCLI) provides a resource for CS educators to find, share, and discuss modular teaching materials and computational platform supports.
Distributed Computing Fundamentals part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
Message Passing Interface (MPI) is a programming model widely used for parallel programming in a cluster. Using MPI, programmers can divide massive data with same task and then and distribute them to multiple processing unit within the cluster. By contrast, distinct different tasks could be assigned to separate processes to be run on different machines in a cluster. In this module, we will learn how to solve larger problems more efficiently by writing programs using the MPI 'distributed memory' programming model and then execute them on cluster. We will start our MPI journey by learning MPI Communications using the simple example "Hello World". Then we will learn MPI Compiling by computing PI using calculus (area under the curve). Finally, we will learn MPI Decomposition by doing Matrix-Vector Multiplication and Matrix-Matrix Multiplication.Module Characteristics Language Supported: C Relevant Parallel Computing Concepts: Data Parallelism Operating System Supported: Linux Possible Course Use: Programming Languages, Hardware Design, Parallel Computing Systems Recommended Teaching Level: Intermediate, Advanced
Heterogeneous Computing part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
This teaching module guides students through the process of building programs using a heterogeneous computing module on a cluster of computers that are themselves able to perform parallel computations. The examples show partial code for running MPI message passing on processes on machines in a cluster, each of which can then run a parallel task in CUDA using a GPU card.
GPU Programming part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
As modern Graphics Processing Unit (GPU) harnessed more and more horsepower, programmers began to use GPU for General Purpose computation, instead of just for graphics rendering. NVIDIAÂ Corporation developed CUDA, a parallel computing platform and programming model, to improve computing performance for parallel computation problems. In this module, we will learn how to solve parallel problems more efficiently by writing programs in CUDA C Programming Language and then executes them on GPUs based on CUDA architecture. This module uses the CUDA parallel computing platform; developer's SDK and toolkit can be found on NVIDIA's website. Module Characteristics Languages Supported: CRelevant Parallel Computing Concepts: Data ParallelismOperating System Supported: Mac OS, Linux, WindowsPossible Course Use: Programming Languages, Hardware Design, Parallel Computing SystemsRecommended Teaching Level: intermediate, Advanced
Parallel Sorting part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
This module, targeted for algorithms and data structures courses, examines the theoretical PRAM model and its use when designing a parallel version of the mergesort algorithm. There is a reading with thought questions, an in-class activity where students create the parallel algorithm psuedocode (provided in a set of ppt slides), an examination of the complexity of the algorithm, and additional homework questions to choose from. Module Characteristics Languages Supported: any Relevant Parallel Computing Concepts: Data Parallelism, Shared Memory Recommended Teaching Level: Intermediate, Possible Course Use: Algorithm Design
Multicore Programming with OpenMP part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
IntelÂ Corporation has set up a special remote system that allows faculty and students to work with computers with lots of cores, called the Manycore Testing Lab (MTL). In this lab, we will create a program that intentionally uses multi-core parallelism, upload and run it on the MTL, and explore the issues in parallelism and concurrency that arise. This module uses the OpenMP parallel platform package; there is an alternative version of this module using Intel's Threading Building Blocks for those more familiar with that library. Module Characteristics Languages Supported: C++ Relevant Parallel Computing Concepts: Shared Memory Recommended Teaching Level: Introductory, Intermediate