We are pleased to announce the latest release of BabelStream. This update adds new implementations in parallel programming models, including ISO C++, SYCL 2020, TBB and Thrust. We also include new standalone implementations in the Julia, Rust and Scala languages. Our build system has been updated to use CMake exclusively, and provides recommended build parameters for major compilers for all programming models.
BabelStream is a benchmark used to measure the main memory bandwidth attainable across a diverse range of CPU and GPU processors. The benchmark is implemented in a wide range of parallel programming models in a consistent manner following best practices for each programming model. This allows BabelStream to measure the sustained main memory bandwidth on a diverse range of processors.
BabelStream is based on the famous STREAM benchmark, but differs in important ways to make it representative of today’s scientific applications. BabelStream requires the size of the arrays to be set at runtime, and allocated dynamically on the heap, rather than fixed at compile time - just as the problem sizes of scientific applications are known only at runtime. The breadth of implementations provides a way to run the benchmark on both CPUs and GPUs. We also incorporate two additional kernels: a dot product and the “nstream” kernel from the Parallel Research Kernels (PRK).
You can read more about updating BabelStream’s SYCL implementation from 1.2.1 to 2020 in our earlier post.
The latest version of BabelStream is available on GitHub.
BabelStream enabled research
Since the previous release in April 2019, we’ve used BabelStream extensively in our own research, and have published a number of papers at international workshops and conferences. The following papers have all used BabelStream; as well as providing up to date results across a wide range of computer architectures, they show the advances we have made in understanding and developing the field of performance portability that this benchmark has enabled.
In collaboration with Intel, we released our latest summative work on performance portability Navigating Performance, Portability and Productivity in the IEEE Computing in Science and Engineering Special Issue on Performance Portability (the authors accepted manuscript is available via the University of Bristol).
Wei-Chen Lin used BabelStream as part of his work tracking the historical performance of SYCL implementations at IWOCL’21. This was a great follow on from our previous study in exploring SYCL for HPC-style applications which was presented at IWOCL’20. Wei-Chen also used BabelStream to evaluate Julia for HPC (DOI - not yet active) in the 2021 IEEE International Workshop on Performance Modeling, Benchmarking and Simulation of High Performance Computer Systems (PMBS).
Our 2020 study, shared at the International Performance Portability and Productivity Workshop at Supercomputing (P3HPC), used BabelStream as one application we used to track how performance portability of different programming models has improved over a diverse range of processors. This extended our earlier 2019 study where we used a suite of applications which included BabelStream to assess the performance portability landscape.
Highlighted release notes
For a detailed list of changes please see the CHANGELOG. Some notable changes are:
- New implementations, including ISO C++, SYCL 2020, TBB, Thrust, Julia, Rust and Scala.
- The addition of the “nstream” kernel, which has an access pattern which requires, and therefore accounts for, read-for-ownership.
- The primary branch is now
main. Please make sure you update your bookmarks.
- The build system has migrated to CMake. We not longer make available Makefiles.
- The GitHub repository now runs Continuous Integration to ensure all models build with a variety of freely available compilers in each update.
Find out more about Dr Tom Deakin at his website: https://hpc.tomdeakin.com.