Many scientific computations require a considerable amount of computing time. This computing time can be reduced by distributing a problem over several processors. Multiprocessor computers used to be quite expensive, and not everybody had access to them. Since 2005, x86-compatible CPUs designed for desktop computers are available with two 'cores', which essentially makes them dualprocessor systems. More cores per CPU are to follow.
This cheap extra computing power has to be used efficiently, which equires parallel programming. Parallel programming methods that work on dual-core PCs also work on larger shared memory systems, and a program designed for a cluster or other type of distributed memory system will also perform well on your dual-core (or multi-core) PC.
The goal of this tutorial is to give an introduction into all aspects of parallel programming that are necessary to write ones own parallel programs. To achieve this, it explains
the various existing architectures of parallel computers,
the software needed for parallel programming, and how to install and configure it,
how to analyse software and find the points where parallelisation might be helpful,
how to write parallel programs for shared memory computers using OpenMP,
how to write parallel programs for or distributed memory computers using MPI and ScaLA-PACK.
This tutorial mainly aims at writing parallel programs for solving linear equation systems. Hopefully it is also useful to give some help for parallelising programs for other applications.
2. System Architectures
4. Performance Analysis
5. SHALE - a program for spherical harmonic analysis