You are here: Downloads C

MulticoreBSP for C

Version 2.0.4 (since the 31st of March, 2019)

The MulticoreBSP for C library is available for download here. The recommended download is the full library source code in compressed tar format. Please note the switch to xz format; decompressed via, for example, the tar -xvfJ MulticoreBSP-for-C.tar.xz command.

The source tarball comes with compilation tools (bspcc and bspcxx). When not using these, take care your applications are linked with:

Linux:POSIX Realtime (-lrt), POSIX Threads (-lpthread)
OS X:POSIX Threads (-lpthread)
Windows:POSIX Threads for Win32

MulticoreBSP for C is free to use, adapt, and extend under the terms of the GNU Lesser GPL license, version 3 (see also the GNU GPL v3 license).

When unsure how to get started, please consult the quick-start guide.


Version 2.0.4 contains many bugfixes over 2.0.3. Many thanks to Frédéric Dabrowski, Arvid Jokabsson, and Rob Bisseling for reporting some of these issues. Initial support for Android, improved build tools bspcc and bspcxx, and prettier test output. The profile mode now also prints the BSP signature, the ratio of useful work versus total run-time.

Version 2.0.3 is the first public release of the second version of MulticoreBSP for C. It brings checkpointing support, flexible APIs (no more need to recompile for compatibility mode), and new compilation modes: debug and profiling. Objects compiled in various modes can be mixed freely-- that is, if you suspect a bug in one part of a large project, only the suspect part can be compiled in debug mode. That way full error checking (and corresponding overheads) are only incurred on the suspect code. The same is true for profiling or compatibility codes, altough the former has minor caveats (see the changelog).
Initial support for accelerators, improved pinning support for hyperthreaded machines, and speed improvements. Added code for machine benchmarking and added more example codes-- and more; see the changelog.

Version 1.2 brings improved pinning support for nested BSP runs, and adds templated BSPlib primitives for C++. Documentation was improved, compilation support and testing now includes the clang LLVM compiler, and some bugfixes relative to version 1.1.0 are included; thanks to Jing Fan and Joshua Moerman for reporting some of these. As always, the changelog contains more details.

Version 1.1 is a small revision update as the run-time thread affinity interface of MulticoreBSP for C has changed. Other notable changes include support for compilation on Windows machines, improved communication speeds, and improved synchronisation speed on systems with many cores. This version includes a new primitive: the bsp_hpsend. See the changelog for more changes and more in-depth descriptions.

Version 1.0.1 brings Mac OS X support and provides a C++-wrapper for those interested in using MulticoreBSP within C++ code. For more details, see changelog.txt. For known issues as the time of release, see known_issues.txt.


The MulticoreBSP for C distribution used to come with prototypes for developing Multi-BSP codes. These are now no longer part of the distribution. Download the latest version here. This distribution relies on MulticoreBSP for C, version 2 or later.

This package contains two approaches for developing Multi-BSP programs. They are

  1. based on a tree of SPMD processes, with execution flow running up and down the tree-- this was first shown at a summer school at the American University of Beirut, 2015. The non-standard flow of the execution raises questions on whether this is the `right' way to approach Multi-BSP as it is proven hard for programmers to get used to. Multi-ML uses a similar approach and is enabled on top of the functional BSML language, instead of C++.
  2. based on C++ template meta programming, as first presented at Parallel Processing 2014. This approach has both programming and efficiency drawbacks: existing code must be refactored completely to fit the framework, data-flow between software modules is not straightforward, and each context switch corresponds to a new call to bsp_begin in MulticoreBSP-- including all its overhead.

The author feels that neither approach is preferred for the practical use of Multi-BSP; these frameworks are still made available in hopes it may inspire better ones.

A previous version of the Multi-BSP frameworks here packaged are available here.

Known issues

See known_issues.txt and the forum for known issues since version 2.0.4.

Reporting bugs

If you find bugs, or wish to suggest improvements or have other general comments, please use the forum or contact us.

Older versions

Version 2.0.3, released on the 8th of May, 2018, is available here.

Version 1.2.0, released on the 13th of May, 2014, is still available here.

Version 1.1.0, released on the 5th of March, 2013, is still available here.

Version 1.0.1, released on the 17th of October, 2012, is still available here.

Version 1.0.0, released on the 29th of August, 2012, is still available here.


There is no updated BSPedupack for C as was the case with MulticoreBSP for Java. Instead, MulticoreBSP for C is fully compatible with the original BSPedupack package by Rob Bisseling. To use this library, MulticoreBSP for C should be compiled in compatibility mode.