Compute Canada

Summer School 2012 Programme

Home | Programme | Registration | Venue | U of O | Contact Us

 


 

Programme

Day 1 (Monday, July 23, 2012) 

0900 - 1600  Introduction to Shared-Memory Programming Using OpenMP

This workshop introduces the OpenMP compiler directives to users who want to write programs for shared-memory parallel computers, or to convert existing serial code to parallel. No previous knowledge about parallel programming is required, but some basic background in programming is assumed. The use of OpenMP has become the de facto industry standard for parallel programming on shared-memory machines, such as large SMP servers, or multicore desktops. Examples are in Fortran and C. Here is a basic outline of the contents:

● Introduction to parallel programming, especially on shared-memory machines
● 
Thread programming and OpenMP compiler directives
● Problems and Pitfalls of shared-memory programming and how to avoid them
● Loop parallelism
● Explicit parallel regions
● Thread synchronization
● A quick look at OpenMP 3.0 

Lectures are combined with hands-on lab exercises that are run on HPCVL cluster nodes. 

Instructor: Hartmut Schmider, HPCVL, Queen's University  

Prerequisites: none

Notes: OpenMPSource: OpenMPcode.tar

 

Day 2 (Tuesday, July 24, 2012) 

900 -1600  Introduction to Distributed-Memory Programming Using MPI

This workshop introduces the Message Passiing Interface (MPI) and is directed at users who want to acquire basic skills in "parallelizing" code for distributed-memory clusters. No prior knowledge of MPI or other message-passing systems is required. However, some background in Unix operating systems and programming in Fortran, C, or other languages would be helpful. The following subjects will be addressed:

● MPI Basics: Programming Environments, Data Types, Communication
● Runtime Environments
● Parallel Principles and Programming Steps
● Some Parallel Models
● Memory Distribution
● User-Defined Data Types
● Combination of MPI with OpenMP

Lectures are combined with hands-on lab exercises that are run on HPCVL cluster nodes. 

Instructor: Hartmut Schmider, HPCVL, Queen's University  

Prerequisites: none

Notes: MPISource: MPIcode.tar

 

Day 3 (Wednesday, July 25, 2012) 

900-1600  Programming GPUs with CUDA

This is an introductory course covering programming and computing on GPUs -- graphics processing units -- which are an increasingly common presence in massively parallel computing architectures. This two-day session will cover the most commonly used C-like programming framework: NVIDIA’s CUDA-C. The basics of GPU programming will be covered, and students will work through a number of hands on examples. Demonstrations of profiling and debugging applications running on the GPU will also be included. The structuring of data and computations that makes full use of the GPU will be discussed in detail. Students should be able to leave the course with the knowledge necessary to begin developing their own GPU applications.

Instructors: 
Pawel Pomorski, SHARCNET, University of Waterloo,
Sergey Mashchenko, SHARCNET, McMaster University.
  

Prerequisites:
C/C++ scientific programming, experience editing and compiling code
in a Linux environment. Some experience with CUDA a plus.

Notes and Source: CUDA_day1.zip

Day 4 (Thursday, July 26, 2012) 

900-1600  Programming GPUs with CUDA

... Continuation from Day 3 ...

Notes and Source: CUDA_day2.zip