I am planning to carry out a small informal training program in IUCAA on High Performance Computing (HPC) or Parallel Computation. I have not fully worked out the program but tentatively the first session will be on November 11, 2011 (may be at 4PM in Bhaskara 2).
The program will have a set of 3-4 lectures and demonstrations by me and some hands on sessions. I expect, hands on sessions can be done in parallel with lectures and demonstrations. However, it may make the session longer (around 1.30 to 2.0 hours). After the first session, I will expect everybody to bring the laptop for the hands on sessions.
The first lecture will be just an overview of parallel computation (basically I will discuss few more things than what I discussed here . Apart from the first session, other sessions will be in the form of modules and every module will have exercises.
If you are an IUCAA member and have not signed in for the activity you can do that here so that I can add you in my mailing list . For time being you can browse my hpc pages from the main page of my webpage, just to have a feel of hpc :).
Download the presentation here
This will be an overview of parallel computing. Basically, I will discuss about the need of parallel computation, models of parallel computation, parallel problems and platforms available. There will be no discussion on programming syntax in this session. I will also explain uni-processors, multi-core processors, multi-processors and cluster systems, General Purpose Graphical Processing Units (GP-GPU) and Accelerated Processing Units (APUs). There will be only lecture and questions and answers in this session and no background of any programming language will be expected. This is may of general interest to everybody.
Some of the participants have told me that they are very much interested in HPC but have forgotten the ABC of programming ! In order to help them I have decided to have one extra session (which will be in place of tutorial of the session -1 and will be of 30 min). Roughly I will explain the following things and people who are already familiar with these things may leave after 1 hour.
Download the presentation from here .
Get all the files (including the missing ones) and Makefile from here .
Shared and distributed memory programming are two main paradigms of parallel programming. The fist one is useful when we have a system in which multiple processing units (eg. cores) share the same main memory (RAM). The second one is useful when we have a large number or workstations networked (clusters). On the basis of the paradigm we are following i.e., shared memory or distributed memory, there are different Application Programming Interfaces (API) available. The most common API for distributed programming has been Message Passing Interacce (MPI). For shared memory programing the common APIs are Posix Threads (pthreads), OpenMp, Intel-Threading Building Blocks (ITBB) etc.
In my last session I discussed about OpenMP (slides and example programs of that are available on my web page). In the present session I plan to explain the posix threads with giving examples in 'C'. Learning Posix threads is not only important from the point of view of shared memory programming, it is useful for GPU and hybrid programming (CPU-GPU) also, since it shares many patterns with those. Apart from explaining a few advanced concepts of 'C' programing like pointers and structures (for those who are not familiar with these), I will cover the following topics:
You can download the slides of my presentation here