Welcome to CSinParallel 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.
Concept: Data Decomposition Pattern part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
This module consists of reading material and code examples that depict the data decomposition pattern in parallel programming, using a small-sized example of vector addition (sometimes called the "Hello, World" of parallel programming. Code is provided, but students need not execute it to see how the pattern is implemented. The example code begins with an original serial version, then shows how decomposition is defined in MPI, OpenMP, and CUDA.
Visualize Numerical Integration part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
This is an activity with working code supplied that enables students to see how various forms of the data decomposition pattern map processing units to computations. The problem we use is numerical integration: approximation of the integral over an interval using the sum of areas of rectangles. Students run examples in OpenMP (threads) and/or MPI (processes) and a depiction of which processing units (either processes or threads) computed each rectangle is played back slow enough to see how the computation took place.
Pandemic Exemplar part of Parallel Computing in the Computer Science Curriculum:Modules:Modules Mini-collection
In this module we present a typical real-world example from epidemiology, where the spread of a pandemic infectious disease is modeled using monte carlo simulation (random movements that simulate the real-world actions of people). Starting from a given amount of infected people, how a disease spreads is modeled over a user-provided length of time. We start with the sequential version of this classic iterative monte carlo solution, then show how the code can be parallelized. Students can run the code and examine performance of sequential and parallel versions.
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