You are here: Downloads C

MulticoreBSP for C

Version 2.0.3 (since the 8th of May, 2018)

The MulticoreBSP for C library is available for download here. The recommended download is the full library source code in compressed tar format.

  • Direct file-by-file downloads:
    Include headers, ANSI C99 and ANSI C++98 codebsp.h, bsp.hpp
    Include headers for MulticoreBSP extensions, ANSI C99mcbsp-affinity.h, mcbsp-profiling.h, mcbsp-resiliency.h
    Include headers for MulticoreBSP extensions, ANSI C++98mcbsp-templates.hpp
    Library, Linux x86_64, statically linkedlibmcbsp2.0.3.a,
  • Experimental Multi-BSP runtimes built on top of MulticoreBSP. One is 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++.
    The other approach was first presented at Parallel Processing 2014 and involves template meta-programming. 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 strongly feels that neither approach is preferred and hence packaged both approaches outside the regular distribution. These experiments are still made available in hopes it may inspire better variants.
  • Previous version available here.

There are no pre-compiled library versions for Windows at this time. All source code is in ANSI C99 using the POSIX Threads (PThreads) and POSIX realtime (rt) extensions; see the quick-start guide on how to link these. The above software 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).


Version 2.0.3 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.

Known issues

See the forum.

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 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.