This project seeks input from the Xcompact3d community to collect benchmarking data on as wide a range of machines as possible - if you have access to a machine not present, and are able to, please consider contributing.
If you plan to contribute to the benchmarks repository, the first step is to fork the repository by
clicking the fork button on the repository main page.
After forking the repository clone your fork somewhere convenient (for editing the .csv files it
is useful to have a spreadsheet program, although with care they can be editted by hand).
See the README for an overview - in summary: build Xcompact3d; copy the appropriate input file from this repository to the run directory; run Xcompact3d (using job queue if necessary); record the average time per timestep.
There are two data files: benchmarks.csv and benchmarks-io.csv for recording data without, and with, performing IO, both follow a similar format.
The columns record:
- the machine name
- a label to identify a series of runs, the suggested format is
MACHINE-TAG-DATEwhereMACHINEis a contraction of the machine name,TAGis some identifier associated with the runs andDATEis in the formatYYYYMMDD, e.g. the set of runs performed on Fulhame on 4th January 2021 and built withgfortran v9.2are labelledFHM-GNU9-20210104. - the number of compute nodes used for the run
- number of
MPIranks per node - the number of
SMTthreads used in a run (also known as HyperThreading) - the code version (printed at the top of
stdoutput) - the compiler and
MPIwrapper combination used (with versions) - the
FFLAGSused when building (these are set in theMakefileor otherwise specified by the user on the command line) - which
FFToption was used when building (default value isgeneric) - the precision used (single or double, double is the default)
- mesh size
- number of time steps
- the timescheme used
- and the timing value for each of three runs to account for variability
For benchmarks with IO, the following additional fields are recorded:
- number of files written per timestep (generally this should be 4 for
ux,uy,uzandpfields) - file size in GB
In addition to the benchmarking data, if you are running on a new machine, a machine summary should be added to machine.org, this file is intended to be human, rather than machine, readable. This file records details of each machine run on that could be useful for comparing results, these include:
- the machine name
- number of nodes
- processor name/family
- sockets (
CPUs) per node - cores per socket
SMTthreads available per core- clock speed
- memory per socket
- cache size
- compute rate (double precision GFLOPs, measure or theoretical if available)
- peak bandwidth per node (measured or theoretical if available)
After recording your data, commit and push your changes back to your fork. Once pushed to your fork, go to your fork's GitHub page and start a pull request, once approved your contribution will be available to the benefit of the Xcompact3d community.