Chapter 6. Software Environment

6.1 OS Configuration

This section will not include information about the
installation of Linux but rather a discussion of the packages
that are necessary on a Beowulf cluster. The boot process will
be presented along with modifications that are needed for
clusters. Modifications to the security model of the computers
to make the individual components look more like one computer
will be discussed. An introduction to the Linux kernel will be
given as well. DHCP and BOOTP configuration will be given along
with the reasons one would use these protocols.

6.1.1 Required Packages
6.1.2 Boot Process
6.1.3 Kernel Introduction and Tuning

6.2 Development Environment

The compilers and languages that are available for x86
compatible Linux systems will be introduced. Open MP and MPI

6.2.1 Compiler and Language Overview
6.2.2 Parallel Programming Environment Overview
6.2.3 Program Build Process

6.3 Scientific Libraries
6.3.1 BLAS and LAPACK
6.3.3 NAG Library Routines
6.3.4 Freely Available Scientific Libraries

6.4 Development Practices and Debugging of Parallel Programs

In this section user level check-pointing and restart will
be introduced. This will include the steps necessary to make
this work with PBS. Different strategies for debugging parallel
programs will be introduced, this includes strategic print
statements, Totalview parallel debugger, gdb for attaching to
individual running threads and the named core file kernel
modification. The subsection on code profiling will include the
use of the GNU prof utility, PAPI, lperfex with the MSR kernel
patches, the jumpshot MPI profiling utility and accessing
hardware counters on the Myrinet CLOS 64 switch.

6.4.1 User Designed Checkpoint and Restart
6.4.2 Generic Debugging Strategies for MPI Programs
6.4.3 Totalview Multi-Process Debugger
6.4.4 GDB for Single Thread Process Debugging
6.4.5 Named core file kernel patch

6.5 Performance Profiling
6.5.1 GNU prof
6.5.2 Performance Ananlysis Programming Interface (PAPI)
6.5.3 lperfex
6.5.4 MPI Profiling