Marcel, the multithreading library for the High-Performance Computing


Powered By GForge Collaborative Development Environment

v2.99.1 of Marcel is available for download here.

Marcel sources are also included in the PM2 software suite. The whole distribution is available here.

Marcel Overview

Marcel is a thread library that was originaly developped to meet the needs of the PM2 multithreaded environment. Marcel provides a POSIX-compliant interface and a set of original extensions. It can also be compiled to provide ABI-compabiblity with NTPL threads under Linux, so that multithreaded applications can use Marcel without being recompiled.

Marcel features a two-level thread scheduler (also called N:M scheduler) that achieves the performance of a user-level thread package while being able to exploit multiprocessor machines. The architecture of Marcel was carefully designed to support a high number of threads and to efficiently exploit hierarchical architectures (e.g. multi-core chips, NUMA machines).

So as to avoid the blocking of kernel threads when the application makes blocking system calls, Marcel uses Scheduler Activations when they are available, or just intercepts such blocking calls at dynamic symbols level.

The most important feature of Marcel is its scheduler, named BubbleSched. BubbleSched is a framework that allows scheduling experts to implement and experiment with powerful user-level thread schedulers. It is based on high-level abstractions called bubbles. The application describes affinities between the threads it launches by encapsulating them into nested bubbles (those which work on the same data for instance). The BubbleSched framework then allows to implement various advanced bubble schedulers that distribute bubbles (and hence threads) over the hierarchy of the computer so as to beneficiate from cache effects and avoid NUMA factor penalties as much as possible. A trace of the scheduling events can be recorded and used after execution for generating an animated movie showing a replay of the execution: how bubbles and threads were created, how they got distributed over the machine, how they eventually got scheduled on processors, etc. The end users may hence easily try and tune various bubble schedulers for their applications, and select the most suited one. More information about BubbleSched can be found here.

This library is currently developed and maintained by Samuel Thibault. The software is freely available under the terms of the GNU General Public License version 2 at the following URL: link. The following processor types are currently supported:

  • X86
  • X86_64
  • IA64
  • PowerPC
  • Alpha
  • Sparc
  • MIPS

The following operating system types are currently supported:

  • GNU/Linux
  • Mac OS X
  • AIX
  • OSF
  • Irix
  • Solaris
  • GNU/Hurd
  • Windows