The use of parallel computers to support engineering design and scientific research has become common-place. This is partly due to the wide use of two or four-way parallel computers, known as SMP (Symmetric Multiprocessing) systems. Simulation by computers today is a third mode of scientific research that complements experimentation and theoretical analysis by making possible the exploration of phenomena that cannot be studied otherwise, and by providing intuition to guide experimental and theoretical work. In several engineering problems, parallel computers reveal the characteristics and feasibility of new designs for VLSI CAD, data mining, network simulation, etc. New journal from IEEE, Computational Science and Engineering, tells us the growing importance in this area.
 
This course is about the programming of distributed and shared memory parallel computers. It will start with a description of parallel machine organizations from a programmer's perspective. Message passing and shared memory program model will be covered in some detail. Languages/libraries such as MPI, PVM, HPF, OpenMP, Pthreads, and Java Threads will be studied with examples. The last part of the course will focus on a few large parallel applications to discuss several bottlenecks and issues such as sychronization and load balancing.