Skip to content
Snippets Groups Projects

General aspects

  • SWIFT is an MPI+X code solving the equations of gravity and hydrodynamics using particle-based methods.
  • Webpage and documentation: www.swiftsim.com
  • Code repository: https://gitlab.cosma.dur.ac.uk/swift/swiftsim
  • Licence: LGPL v3.0
  • Is is written in C using gnu99 extensions and posix for the threading (not OpenMP).
  • The code exploits task-based parallelism and uses asynchronous MPI communications. We rely on the MPI 3.1 standard and the MPI_THREAD_MULTIPLE option.
  • We use many 1000s of small messages to help with the fine-grained tasking design of the software. This is problematic with some MPI implementations that only marginally obey the MPI 3.1 standard.
  • The gravity code relies heavily on the compiler's auto-vectorizer to produce an efficient binary.
  • The hydro code is largely bound by memory bandwidth.

Benchmarks

There are two separate benchmarks designed to test the performance of the different code sections.

The first test is focused on the performance of the gravity code in large-scale runs. This exercises the math library, raw FP-performance at full-load when there is a lot of operations to perform for every particle in the system. This test comes in different sizes as the goal is to fill the memory of the nodes as much as possible. In decreasing size (factors of 8):

The second test exercises mainly the hydrodynamics and additional physics modules. This is less demanding on the raw FP performance but tests the memory bandwidth, numa effects and scalability.

  • EAGLE (Multi node weak scaling test)

Important: Accuracy tests

If the code is altered, new compiler flags added or anything is done that may change the accuracy of the solver, a test of the accuracy needs to be performed. This can be done (to first order) using the test:

This produces a small meaningful metric for the simulation that can be tested against a reference solution. Please provide us with this file for all of your compiler combinations.

Notes on Benchmark Inputs

Note that some of the tests above are large and require large input. The file sizes are:

  • EAGLE - 3.6 GB (md5sum e6a5de0e962d8ffb7589671b9613daa0)
  • PMillennium-768 - 8.3 GB (md5sum f20a8c446e24444df55daaea2163f233)
  • PMillennium-1536 - 163 GB (md5sum bfaad140062f475c120002a76dd83f01)
  • PMillennium-3072 - 1.3 TB (md5sum 59bd72f821e5f5a117a5c2ed23056f9e)

Side tables of size < 100 MB are also required for the EAGLE run.

Outputs and Performance

Please save files named timesteps_<NUM_THREADS>.txt as these contain information about performance. If you want to assess performance, you should take the second last column "Wall-clock time [ms]" of this file, discard the 0th time step and sum up the rest of the entries. Lower values are better for this.