SMPI Integration Testing
Proxy apps are scale models of real, massive HPC applications: each of them exhibits the same communication and computation patterns than the massive application that it stands for. But they last only a few thousands lines instead of some millions of lines. These proxy apps are usually provided for educational purpose, and also to ensure that the represented large HPC applications will correctly work with the next generation of runtimes and hardware. See also this explanation of the proxy apps' purpose.
SMPI is an implementation of MPI executing the application on top of the SimGrid simulator. This allows to study the application behavior in many details that would be hard to observe if not in a simulator, or on platforms that do not exist yet. The predictive power of SMPI was shown to be very good, provided that you correctly model the target platform [🗎, 🗎] while very scalable [🗎].
This repository gathers several collections of proxy apps, and reports their support by the SMPI implementation. This is tested nightly on a dedicated jenkins server.
Full Scale Applications
In addition to the proxy apps testing presented here, some real-scale HPC projects directly use SMPI as a basis for their regression and integration tests:
Application | Build status |
---|---|
BigDFT is a DFT massively parallel electronic structure code using a wavelet basis set. | |
StarPU is an unified runtime system for heterogeneous multicore architectures. | |
OpenMPI-test-suite is a test suite used by OpenMPI and several other MPI libraries | |
Intel-benchmarks-suite is a benchmarks suite by Intel | |
NPB is a test suite designed to help evaluate the performance of parallel supercomputers | |
ECP Proxy Application
Benchmark | Lines | Lang | Script | Status | Build Patch | Code Patch |
---|---|---|---|---|---|---|
AMG | 4,658 | C | 🎫 | ▪️ | ▪️ | |
CLAMR | 109,477 | C++ | 🎫 | ▪️ | 🎫 | |
Chatterbug | 1,050 | C++ | 🎫 | ▪️ | ▪️ | |
Comb | 1,965 | C++ | 🎫 | ▪️ | 🎫 | |
CoMD | 4,658 | C | 🎫 | ▪️ | ▪️ | |
CoSP2 | 2,199 | C | 🎫 | ▪️ | 🎫 | |
CloverLeaf | 37,477 | C, F90 | 🎫 | ▪️ | ▪️ | |
CloverLeaf3D | 11,200 | C, F90 | 🎫 | ▪️ | ▪️ | |
EBMS | 841 | C++, F90 | 🎫 | ▪️ | ▪️ | |
Ember | 1,300 | C | 🎫 | ▪️ | ▪️ | |
ExaMiniMD | 6,184 | C++ | 🎫 | 🎫 | only if sampling is needed : 🎫 | |
CabanaMD | 33,000 | C++ | 🎫 | |||
HPCCG | 1,548 | C++ | 🎫 | ▪️ | ▪️ | |
HPGMG | 12,073 | C | 🎫 | ▪️ | ▪️ | |
Kripke | 5,350 | C++ | 🎫 | ▪️ | ▪️ | |
MINITRI | 1,534 | C++ | 🎫 | ▪️ | ▪️ | |
MiniAero | 4,645 | C++ | 🎫 | 🎫 | ▪️ | |
MiniAMR | 8,329 | C | 🎫 | ▪️ | ▪️ | |
MiniFE | 19,907 | C | 🎫 | ▪️ | ▪️ | |
MiniGhost | 8,962 | F90 | 🎫 | 🎫 | ▪️ | |
MiniGMG | 4,257 | C | 🎫 | ▪️ | ▪️ | |
MiniMD | 9,344 | C++ | 🎫 | 🎫 | ▪️ | |
MiniSMAC2D | 8,329 | F90 | 🎫 | ▪️ | ▪️ | |
MiniVite | 2,375 | C++ | 🎫 | ▪️ | ▪️ | |
Nekbone | 38,674 | C, F77 | 🎫 | ▪️ | ▪️ | |
MiniXyce | 2,020 | C++ | 🎫 | ▪️ | ▪️ | |
PENNANT | 3,464 | C++ | 🎫 | 🎫 | ▪️ | |
PETSC | 750,000 | C, C++, F90 | 🎫 | ▪️ | ▪️ | |
Picsar | 57,800 | F90 | 🎫 | ▪️ | 🎫 | |
ProfugusMC | 107,400 | C++ | 🎫 | ▪️ | ▪️ | |
Quicksilver | 9,821 | C++ | 🎫 | ▪️ | 🎫 | |
SimpleMOC | 2,864 | C | 🎫 | 🎫 | ▪️ | |
SNAP | 4,640 | F90 | 🎫 | ▪️ | ▪️ | |
SNBONE | 5,897 | F90 | 🎫 | 🎫 | 🎫 | |
SWFFT | 3,827 | C++, C, F90 | 🎫 | ▪️ | only if sampling is needed : 🎫, only for shared allocs : 🎫 | |
Sw4lite | 48,436 | C | 🎫 | ▪️ | only if sampling is needed : 🎫, only for shared allocs : 🎫 | |
TeaLeaf | 5,729 | F90 | 🎫 | ▪️ | ▪️ | |
Tycho2 | 6,343 | C++ | 🎫 | ▪️ | 🎫 | |
VPFFT | 3,384 | C++ | 🎫 | 🎫 | ▪️ | |
XSBench | 1,086 | C (OMP) | 🎫 | ▪️ | ▪️ |
The following apps of this collection are not included:
- Requiring OpenMP only : PathFinder, CoHMM, NuT, RSBench, CoGL
- Laghos (depends on HYPRE, METIS, MFEM)
- FleCSALE (depends on Exodus, FleCSI, ParMETIS)
- PlasmApp (depends on Trilinos)
- LCALS, AMR_Exp_Parabolic (code source not available)
- ASPA, RajaPerformanceSuite : (no MPI)
CORAL benchmarks
Benchmark | Lines | Lang | Script | Status | Build Patch | Code Patch |
---|---|---|---|---|---|---|
amg2013 | 75,000 | C | 🎫 | ▪️ | ▪️ | |
HACCIO | 2,000 | C++ | 🎫 | ▪️ | ▪️ | |
KMI_HASH | 4,239 | C | 🎫 | ▪️ | ▪️ | |
LULESH | 5,000 | C | 🎫 | ▪️ | ▪️ | |
IOR | 14,000 | C | 🎫 | ▪️ | ▪️ | |
UMT2013 | 34,000 | C, F90, C++ | 🎫 | 🎫 | ▪️ | |
Qbox | 45,000 | C++ | 🎫 | 🎫 | ▪️ | |
LSMS | 200,000 | C++, F90, C | 🎫 | 🎫 | ▪️ | |
MCB | 13,000 | C++ | 🎫 | 🎫 | ▪️ | |
CLOMP | 1,374 | C | 🎫 | ▪️ | ▪️ |
The following apps of this collection are not included:
- too heavy : QMCPACK (supported, but compilation takes 30+ minutes and several GB of disk space) (📖)
- BigSort : works, but needs to generate/read input files through MPI/IO calls. SMPI's MPI/IO implementation does not actually read/write files on the disk, so data can't be read (📖 📦)
- OpenMP only : Graph500 Memory benchmarks, FTQ, XSBench, NEKbonemk, HACCmk, UMTmk, AMGmk, MILCmk, GFMCmk.
- Using Python: Pynmaic.
- CAM-SE (📖📦) Depends on NETCDF, Lapack, cBlas.
- NAMD (📖📦) Requires mpixlc.
Trinity-Nersc benchmarks
Benchmark | Lines | Lang | Script | Status | Build Patch | Code Patch |
---|---|---|---|---|---|---|
SMB - mpiheader | 418 | C | 🎫 | 🎫 | ▪️ | |
SMB - msgrate | 362 | C | 🎫 | ▪️ | ▪️ | |
ziatest | 255 | C | 🎫 | ▪️ | ▪️ | |
psnap | 384 | C | 🎫 | ▪️ | ▪️ | |
mdtest | 2,187 | C | 🎫 | ▪️ | ▪️ | |
mpimemu | 4,980 | C | 🎫 | ▪️ | ▪️ | |
OMB_MPI | 1,406 | C | 🎫 | ▪️ | ▪️ | |
OMB_MPI (one-sided) | 1,679 | C | 🎫 | ▪️ | ▪️ | |
OMB_MPI (collective) | 1,269 | C | 🎫 | ▪️ | ▪️ | |
MiniFE | 4,968 | C++ | 🎫 | ▪️ | ▪️ | |
GTC | 5,591 | F90 | 🎫 | ▪️ | ▪️ | |
MILC | 82,645 | C | 🎫 | ▪️ | ▪️ | |
MiniDFT | 30,874 | C, F90 | 🎫 | (with MKL) | ▪️ | |
Stream | 747 | C, F77 | 🎫 | ▪️ | ▪️ |
The following apps of this collection are not included:
CodeVault benchmarks
Benchmark | Lines | Lang | Script | Status | Build Patch | Code Patch |
---|---|---|---|---|---|---|
MCM | 453 | C++ | 🎫 | ▪️ | ▪️ | |
n-Body_methods | 2,401 | C++ | 🎫 | ▪️ | ▪️ | |
basic MPI IO | 380 | C++ | 🎫 | ▪️ | ▪️ | |
read2shmem | 202 | C++ | 🎫 | ▪️ | ▪️ | |
bhtree_mpi | 1,200 | C++ | 🎫 | ▪️ | ▪️ |
The following apps of this collection are not included:
- Requesting OpenMP: Dense_linear_algebra, N-body_methods (bhtree, hermite4, naive), Structured_grids.
- Using unsupported MPI primitives : Unstructed_grid (halo exchange)
- Sparse_linear_algebra (depends on PETSc)
- Spectral_methods (depends on OpenMP, CUDA, OpenCL, FFTW)
- Unstructured_grids ( depends on libmesh)
MeteoFrance Proxy Applications
Benchmark | Lines | Lang | SMPI | Patch |
---|---|---|---|---|
GCR | 504 | C++ | ☀️ | ▪️ |
Halo | 1910 | C++ | ☀️ | 🎫 |
Transpose | 2554 | C++ | ☀️ | 🎫 |
HPL
Benchmark | Lines | Lang | SMPI | Patch |
---|---|---|---|---|
Vanilla | 15,807 | C | ▪️ | |
Optimized | 15,807 | C | ▪️ |
Legend
Symbol | Meaning | Symbol | Meaning |
---|---|---|---|
☀️ | Execution successful | 🎫 | Patch provided |
❌ | Execution fails | ▪️ | No patch needed |
⛅ | Done successfully but with some warnings | 🚧 | SMPI missing feature |
🐞 | Has an open issue | ||
📖 | Compilation instructions | 📦 | Source code |