SHARCNET Summer School 2007: Proposed Sessions

Cluster Programming with MPI

Units: 4 (2 days)

Synopsis: This workshop will provide a hands-on introduction to the Message Passing Interface (MPI), the most widely used interprocess communication library in parallel development for cluster-based computing. We will consider basic facilities for communication and touch on more advanced issues such as collective computation operations, user-defined data types, and key issues of parallel design relevant to architecting efficient parallel solutions. Concepts will be reinforced with examples and exercises on the development cluster. Individuals taking this course are expected to have a good grasp of basic procedural programming in a language such as C or FORTRAN, however no experience with parallel programming is assumed.

Prerequisites: C/C++/FORTRAN Programming (as a SSS course) or equivalent

Lab: Computers, ssh client, Internet access.

Certification: MPI Basic

Parallel Programming with OpenMP

Units: 2 (1 day)

Synopsis: All sessions will be examples oriented.

Unit 1 covers the basic concepts and features of OpenMP, including the constructs and directives for specifying parallel regions, work sharing, synchronization, and runtime library functions and environment variables. Examples in C and Fortran will be included.

Unit 2 will talk about data environment, data dependency, race condition and performance issues of OpenMP. Various approaches to real applications such as Jacobi Solver, Matrix multiplications, etc will be presented.

The backbone of the talks will be the online training materials http://www.sharcnet.ca/Documents/literacy/devel/sn_openmp_jemmy.pdf

Prerequisites: Basic language knowledge either in C or Fortran.

Lab: Some hands-on exercises.

Concurrent and Parallel Programming with Pthreads

Units: 2 (1 day)

Synopsis: This tutorial will give an introduction to the POSIX threads APIs that are designed for concurrency and parallelism in system programming. In a simplest sense threads are streams of control within a process performing different tasks at the same time. Threads within a process can share data and use less resources than using processes. On shared memory systems with multiple processors or cores, threads can be scheduled and dispatched by the operating system to different processors/cores, thus the concurrency and parallelism can be achieved. In this tutorial we will introduce the common models that are used in multithreaded applications. We will address the synchronization and race condition issues that are generally associated with concurrent programming. During the one day tutorial, attendees will be exposed to various concepts and examples. The attendees will be given a number of exercises with sample code to get a hands-on experience in implementing some of the commonly used models, including fork-join, manager/worker, thread pool, barrier and message queues, etc.

Prerequisites: The attendees are expected to be familiar with the C/C++ programming language, data structures and UNIX systems.

Lab: Hands-on exercises.

Certification: n/a

Fortran 90: Array Processing and Polymorphism as in MATLAB

Units: 1 (1/2 day)

Synopsis: This tutorial will go over the new language features added to the Fortran 90 standard, which has made Fortran as powerful as C++ in programmability and as simple as MATLAB in productivity. We will compare Fortran and MATLAB in areas including data type, array processing, function and procedures with numeric polymorphism and performance, etc.

Prerequisites: The attendees are expected to have experience in numerical computation with any computer languages and have some familiarity with either Fortran or MATLAB. The attendees should be familiar with the UNIX environment under which they will have hands-on lab exercises.

Lab: Yes

Certification: n/a

Shell Scripting with bash

Units: 1 (1/2 day)

Synopsis: This seminar will provide an overview of the bash shell (which most users have as their default shell on SHARCNET clusters), and the scripting facilities it provides. Shell scripts can be used in conjunction with common system utilities to automate a wide variety of tasks that would otherwise be time consuming or tedious to do manually. Practical examples will range from large scale job submission to post-processing/reformatting program output and file management.

Prerequisites: Intro Unix (as a SSS course) or equivalent

Lab: Internet access for presenter (shell/network access for attendees is optional)

Certification: n/a

Parallel Debugging

Units: 1 (1/2 day)

Synopsis: Debugging is an important step in developing a new code, or porting an old one to a new machine. Debugging of parallel programs is a particularly laborious exercise. This course is an introduction to using the powerful parallel debugger DDT available on SHARCNET. Both basic (preparing your program, launching DDT, user interface etc.) and more advanced (memory debugging, data visualization etc.) topics will be covered.

Prerequisites: Basic knowledge of Linux and programming (Fortran/C).

Lab: X-terminals, Internet.

Scientific Visualization -- Programming with VTK

Units: 1 (1/2 day)

Synopsis: The Visualization ToolKit (VTK) is an open source, freely available software system for 3D computer graphics, image processing, and visualization used by thousands of researchers and developers around the world. This short course will introduce the basic concepts, architecture, and implementation of VTK, with examples showing how to use it to visualize data of various formats. The aim is to let students gain the knowledge and skills to visualize their data from their research fields.

Prerequisites: (incl. links to other sessions, proposed or imagined) C/C++, basic knowledge of computer graphics.

Lab: As X server can not be guaranteed I will do one-side lecturing over AG, without asking students to run any VTK scripts.