Skip to main content

NAS Parallel

The NAS Parallel Benchmarks (NPB) are a small set of programs designed to help evaluate the performance of parallel supercomputers. It supports both single and multi machine scanerio. In multi machine scanerio we can have 1 client to N server environment.

The Message Passing Interface(MPI) is used to communicate over the network for running on multiple machines. For single machine Open Multi-Processing(OpenMP) is used for parallel programming.

System Requirements

It is recommended to run this workload on machines with infiniband drivers and hardware. There are other more exhaustive workloads for testing network performance for non-HPC machines in the Virtual Client. It is also required that all machines under test can communicate freely over port 22.

What is Being Measured?

The following workload tests the High Performance Computing(HPC)/Parallel Computing capabilities of system. Using MPI(For Multiple machines configuration) and OpenMP (for single-system configurations using threads).

Depending on the configuration of the workload different pieces of hardware are tested. If the hardware that is being tested has Infiniband, then the hardware and drivers installed for the Infiniband infastruture are tested. If these are not present, regular network stacks/channels are tested.

The list of benchmarks that are currently executed as part of the NAS Parallel workload include the following:

BenchmarkDescription
ISInteger Sort, random memory access
EPEmbarrassingly Parallel
CGConjugate Gradient, irregular memory access and communication
MGMulti-Grid on a sequence of meshes, long- and short-distance communication, memory intensive
FTdiscrete 3D fast Fourier Transform, all-to-all communication
BTBlock Tri-diagonal solver
SPScalar Penta-diagonal solver
LULower-Upper Gauss-Seidel solver
DCData Cube
DTData Traffic
UAUnstructured Adaptive mesh, dynamic and irregular memory access

Workload Metrics

The following metrics are examples of those captured by the Virtual Client when running the NAS Parallel Benchmarks workloads.

Scenario NameMetric NameExample Value (min)Example Value (max)Example Value (avg)Unit
MPI bt.D.xExecutionTime21671.7730122.825266.78541666667Seconds
MPI bt.D.xMop/s total1936.62691.792325.0579166666668Mop/s
MPI bt.D.xMop/s/process968.31345.891162.5279166666667Mop/s
MPI cg.D.xExecutionTime3152.56436.323843.4735714285718Seconds
MPI cg.D.xMop/s total565.991155.56977.1558928571428Mop/s
MPI cg.D.xMop/s/process283.0577.78488.5780952380952Mop/s
MPI ep.D.xExecutionTime658.631983.27850.881388888889Seconds
MPI ep.D.xMop/s total69.3208.68186.3202777777778Mop/s
MPI ep.D.xMop/s/process34.65104.3493.15993055555555Mop/s
MPI ft.D.xExecutionTime3253.225572.114044.5483333333338Seconds
MPI ft.D.xMop/s total1608.682755.342267.0758333333335Mop/s
MPI ft.D.xMop/s/process804.341377.671133.5383333333332Mop/s
MPI is.C.xExecutionTime3.1818.984.746808510638298Seconds
MPI is.C.xMop/s total70.71422.28340.1694326241135Mop/s
MPI is.C.xMop/s/process35.36211.14170.08503546099289Mop/s
MPI lu.D.xExecutionTime4289.316640.014633.097168141593Seconds
MPI lu.D.xMop/s total6008.719301.78731.985309734511Mop/s
MPI lu.D.xMop/s/process3004.364650.854365.992389380531Mop/s
OMP bt.D.xExecutionTime1100.695811.243684.0739181286546Seconds
OMP bt.D.xMop/s total10038.4352999.2517673.181461988304Mop/s
OMP bt.D.xMop/s/thread927.773541.782612.988596491228Mop/s
OMP cg.D.xExecutionTime765.053576.51400.8384210526318Seconds
OMP cg.D.xMop/s total1018.564761.683013.099298245614Mop/s
OMP cg.D.xMop/s/thread63.66297.6188.31877192982456Mop/s
OMP dc.B.xExecutionTime150.25956.53290.0096078431372Seconds
OMP dc.B.xMop/s total0.623.962.5537254901960786Mop/s
OMP dc.B.xMop/s/thread0.040.680.3661764705882352Mop/s
OMP ep.D.xExecutionTime83.92338.17312.5922929936306Seconds
OMP ep.D.xMop/s total406.411637.72480.22484076433127Mop/s
OMP ep.D.xMop/s/thread25.79103.1680.0843949044586Mop/s
OMP is.C.xExecutionTime0.352.491.3286624203821658Seconds
OMP is.C.xMop/s total539.733841.831126.8812101910829Mop/s
OMP is.C.xMop/s/thread33.73271.12197.51891719745223Mop/s
OMP lu.D.xExecutionTime618.092992.731967.2742666666669Seconds
OMP lu.D.xMop/s total13331.5964550.8522582.2706Mop/s
OMP lu.D.xMop/s/thread961.444556.673596.0266666666668Mop/s
OMP mg.D.xExecutionTime77.26450.16194.33686274509805Seconds
OMP mg.D.xMop/s total6917.240304.4621151.509411764706Mop/s
OMP mg.D.xMop/s/thread432.322519.031321.969411764706Mop/s
OMP sp.D.xExecutionTime915.285499.232607.270882352942Seconds
OMP sp.D.xMop/s total5370.9332269.9213349.254705882353Mop/s
OMP sp.D.xMop/s/thread474.12464.481727.7460784313724Mop/s
OMP ua.D.xExecutionTime804.093669.812349.879591836735Seconds
OMP ua.D.xMop/s total47.36216.1283.12265306122447Mop/s
OMP ua.D.xMop/s/thread3.4216.4211.545204081632655Mop/s

Packaging and Setup

  1. Create "suite.def" & "make.def" using the templates given for example. a. For Multiple machines go to folder "NPI-MPI/config" folder. b. For Single machine go to folder "NPI-OMP/config" folder.

  2. Build benchmarks using make suite command. a. For Multiple machines build benchmarks in 'NPB-MPI' folder by going to it as working directory. b. For Single machine build benchmarks in 'NPB-OMP' folder by going to it as working directory.

  3. Set Environment variable using the command : export OMP_NUM_THREADS=<available_number_of_physical_cores> (e.g. export OMP_NUM_THREADS=4)

  4. For multi-system scenarios setup passwordless SSH. See the blog post here for examples. Skip this step if you are running a single-system scenario.

  5. Run the benchmark: a. For multi-system scenarios, run command sudo runuser -l <Username> -c 'mpiexec -np <Number_of_Machines> -host <Host_IP_Address> <benchmarkpath>'. b. For Single machine to run a benchmark run command sudo <benchmarkpath>'.

Common Issues

  • Before downloading any dependency run command sudo apt-get update .
  • Before running mpiexec setup passwordless SSH. OpenMPI does not works without it.
  • sudo mpiexec does not works because it uses 'root' user which does not have passwordless login permission.
  • To run through sudo use sudo runuser -l <Username> ...