You are here: Home / Cluster / Tutorials / Linpack Benchmark

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.