Linpack Benchmark
HPL: A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers
LINPACK is a collection of Fortran subroutines that analyze and solve linear equations and linear least-squares problems. The package solves linear systems whose matrices are general, banded, symmetric indefinite, symmetric positive definite, triangular, and tridiagonal square. In addition, the package computes the QR and singular value decompositions of rectangular matrices and applies them to least-squares problems. LINPACK uses column-oriented algorithms to increase efficiency by preserving locality of reference.
http://www.netlib.org/benchmark/hpl/
Installation
Assumptions:
- MPI is already installed / working
- BLAS (Basic Linear Algebra Subprograms) is already installed
Load necessary module:
module load mpi/openmpi-2.0.2
Create a new directory (inside your home directory) for this program with the 'mkdir' command. Don't download/install it on top of your other program!
mkdir ~/linpack
cd ~/linpack
Download:
wget http://www.netlib.org/benchmark/hpl/hpl-2.1.tar.gz
Unpack:
tar -xzf hpl-2.1.tar.gz
Change to the program directory:
cd hpl-2.1
Read the INSTALL file for instructions. (Press 'q' to quit the 'less' text viewer when finished):
less INSTALL
Copy the Linux/Pentium-II Makefile and rename it to something representative of this current build:
cp setup/Make.Linux_PII_CBLAS Make.GNU_atlas
Edit Make.Linux_PII_training in your favorite text editor:
nano Make.GNU_atlas
Make the following changes to the Makefile:
Change 1: ARCH needs to match the name of the Makefile:
ARCH= GNU_atlas
Change 2: TOPdir needs to be set to the folder containing the makefile
TOPdir = ${HOME}/linpack/hpl-2.1
Change 3: Clear out the MPI variable. We'll be using the MPI compiler wrapper (mpicc) directly which provides this function
MPdir =
MPinc =
MPlib =
Change 4: The BLAS variables (http://www.netlib.org/blas/) need to point to the correct locations. Further, libcblas.a is deprecated - use libtatlas.so instead. (satlas is the single-threaded version of Atlas, while tatlas is the multi-threaded version)
LAdir = /usr/lib64/atlas/
LAlib = $(LAdir)/libtatlas.so
Change 5: Use the MPI compiler wrappers
CC = mpicc
LINKER = mpif77
Compile for that specific architecture.
make arch=GNU_atlas
If you screw up and get an error when compiling, make sure to clean out old compilation garbage before trying again:
make clean_arch_all arch=GNU_atlas
The result of a successful compile should be the creation of the executable located inside the program directory "bin/GNU_atlas/xhpl"
Program Execution - Basics
Run the benchmark.
cd bin/GNU_atlas
srun -n 8 ./xhpl
Should see a bunch of tests on the screen, with the following summary at the end:
Finished 864 tests with the following results:
864 tests completed and passed residual checks,
0 tests completed and failed residual checks,
0 tests skipped because of illegal input values.
--------------------------------------------------------------------------------
End of Tests.
Program Execution - Advanced
To run a larger LINPACK benchmark that uses more nodes, CPU cores, or memory, you will need to replace the existing HPL.dat file next to the xhpl binary with a new customized file. The wizard at http://www.advancedclustering.com/act-kb/tune-hpl-dat-file/ can help you create one.