Embedded Multicore Building Blocks

Boost your applications' performance

07 November 2017

HiPEAC Newsletter

The current issue of the HiPEAC Newsletter contains an article about the latest release of EMB². The HiPEAC Newsletter is a quarterly publication providing news on activities within the European HiPEAC network, as well as activities on high-performance embedded architectures and compilers at large.

18 October 2017

Multicore Programming Practices

The latest version of the Multicore Programming Practices guide, which explains the nuts and bolts of developing multicore software, now contains an introductory section on MTAPI and EMB². Have fun!

25 August 2017

News Articles

26 July 2017

Video on MTAPI and EMB²

Learn MTAPI and EMB² in six minutes: Watch the video on parallel programming of heterogeneous embedded systems produced by the Multicore Association.

18 July 2017

Multicore Association Press Release

EMB² version 1.0.0 provides a significantly enhanced implementation of the Multicore Task Management API (MTAPI). Learn more about the benefits of MTAPI and its relevance for frameworks like EMB² in an official press release published by the Multicore Association.

11 July 2017

EMB² Version 1.0.0

We are glad to announce a major release of EMB² which is the result of more than two years of development. Since the first open source version, we have worked on a number of features and integrated several improvements:

  • Fully compliant MTAPI reference implementation plus C++ wrappers for convenient task management
  • Support for heterogeneous systems at all levels (MTAPI and high-level algorithms / patterns)
  • Ready-to-use plugins for OpenCL, CUDA, and distributed systems communicating over network
  • Various API and build system enhancements for better usability and reduced development effort
  • Improved support for timing-critical applications using task priorities and affinities
  • Revised and extended documentation including a comprehensive sample application
  • Wider platform support and easier portability to other hardware architectures
  • Performance and stability improvements (e.g., through static code analysis)

Further information can be found in the CHANGELOG.

Feedback and contributions are very welcome!

Your EMB² team

P.S. If you like our work, a star on GitHub would be greatly appreciated. Thank you!

19 June 2017

Multilib Support

Sebastian Huber from embedded brains GmbH added multilib support to the EMB² build environment. For example, the following command invoked from the base directory builds and installs EMB² for all multilibs of the arm-rtems4.12 GCC cross-compiler installation:

./scripts/build_gcc_multilibs.sh arm-rtems4.12

Thank you very much for the contribution!

16 May 2017

EMB² Code Quality Measures

Since the early days of EMB² development, we have put considerable effort on ensuring high code quality and stability. This includes zero compiler warnings at highest warning level, adherence to Google’s coding guidelines using cpplint, unit tests with more than 90% statement coverage, automatic rule checking using cppcheck, and dynamic threading analysis using Helgrind. Most of the tools are regularly run (at least nightly) by our internal CI server. Additionally, every commit triggers a regular build using GCC and Clang on Travis CI.

With the upcoming major release (version 1.0.0), we are happy to announce additional measures that aim to improve the quality of EMB² even further:

  • We follow the best practices of the Linux Foundation’s Core Infrastructure Initiative, which define a maturity model for open source software. Click here for a detailed assessment.
  • We use Coverity Scan for static analysis of the source code, where we achieve a defect density of 0.0 with only 13 false positive warnings (automatically triggered on every update of the master branch).
  • We verify correctness of our data structures by checking linearizability of the involved operations.
  • We employ Microsoft’s AppVerifier tool, which is part of the Windows SDK, prior to every release for concurrency fuzzing, a technique that helps to find subtle bugs.

12 May 2017

Improved Platform Support using C11/C++11-based Atomic Operations

EMB² ships with implementations of atomic operations for x86 and ARM processors to be usable with older compilers (supporting C99 / C++03 only). This is important for applications that cannot be migrated easily to more recent language standards. Thanks to Sebastian Huber from embedded brains GmbH, EMB² can now be built using atomic operations provided by C11 / C++11. Just add the option -DUSE_C11_AND_CXX11=ON when generating native build files, e.g. type cmake .. -DUSE_C11_AND_CXX11=ON. This way, EMB² can be used on a variety of platforms besides x86 and ARM such as PowerPC, MIPS, or SPARC. Thanks a lot for the great work and contributing to EMB²!

07 April 2017

EDN Article about Advanced Driver Assistance Systems

Advanced driver assistance systems (ADAS) require a lot more processing power than traditional automotive applications due to the large amount of sensor data they have to process. In his excellent article “Specialized compilers address ADAS needs” on EDN, Alexander Herz from TASKING (Altium) discusses the challenges in building such systems, from finding a suitable hardware architecture over highly optimized libraries and hardware accelerator support to safety requirements. Regarding parallel programming, which is inevitable for compute-intensive applications, the author states: “Fortunately, libraries like EMB² and LAPACK can be used with relatively little risk, as they were written by experts in this field. As an additional advantage, these libraries ensure a relatively large speed increase due to their parallelism and optimization.” Thank you very much!

22 December 2016

EMB² Version 0.5.0

Right in time for Christmas, we are proud to announce the largest update EMB² has seen so far. Version 0.5.0 includes several new features and improvements, most notably:

  • Enhanced C++ interfaces for MTAPI task handling
  • CUDA plugin for the task scheduler (experimental)
  • Support for worker thread priorities
  • Task priorities and affinities in dataflow networks
  • Threading analysis mode using mutex-based atomics
  • Improved documentation and examples

Starting with this release, we use Microsoft’s AppVerifier tool for concurrency fuzzing, a technique that explores different schedules in order to find bugs that depend on the actual execution order of threads.

Have fun!

16 December 2016


Sebastian Huber from embedded brains GmbH ported EMB² to RTEMS, an open source real-time operating system (RTOS) that supports standard APIs such as POSIX. RTEMS is used in space flight, medical devices, networking, etc. and runs on a variety of different processor architectures including ARM, PowerPC, Intel, Blackfin, MIPS, and Microblaze. Thanks a lot for the great work and contributing to EMB²!

14 December 2016

Research Project ARAMiS II

The research project ARAMiS II funded by the German Federal Ministry for Education and Research successfully started on October 1st. Within the next three years, the consortium consisting of 33 partners under the lead of the Karlsruhe Institute of Technology (KIT) will work on development processes, tools, and platforms for the efficient use of multicore architectures. As mentioned in a recent article on eeNews, this includes the creation of methods to increase safety, efficiency, and comfort in the deployment of multicore technologies and to make them available at an industrial scale. We are very proud to participate in ARAMiS II and will do our best to integrate the results of our work in the area of runtime platforms in EMB².

14 November 2016

Presentation at ESE Kongress 2016

Tobias Langer from the Laboratory for Safe and Secure Systems (LAS³) at OTH Regensburg will give a talk on real-time capability classes with an application to EMB² at the Embedded Software Engineering Kongress, which will take place from Nov. 28 to Dec. 2 in Sindelfingen, Germany. Looking forward to the talk!

04 November 2016

Migration of Issues from JIRA to GitHub

With the introduction of the ‘Projects’ feature in GitHub, we decided to retire JIRA, which we have used so far for issue tracking and planning. All open issues will soon be moved to GitHub. Apologies in advance for the number of mails you will receive in case you are watching the repository. A summary of already closed JIRA issues can be found here.

25 August 2016

Talk at ROME Workshop (Euro-Par 2016)

On August 23, Tobias Schüle presented the results of joint work between Prof. Sunita Chandrasekaran (University of Delaware), Prof. Barbara Chapman (University of Houston), and Siemens on “Exploring Task Parallelism for Heterogeneous Systems Using Multicore Task Management API” at the Workshop on Runtime and Operating Systems for the Many-core Era (ROME) held in conjunction with EuroPar 2016 in wonderful Grenoble, France. The talk showed that MTAPI is very well-suited as an abstraction layer for heterogeneous systems consisting of classical multicore CPUs as well as accelerators such as GPUs. The slides are now available for download from the website of the workshop.

14 May 2016

EMB² Version 0.4.0

Version 0.4.0 is out! It brings a number of enhancements such as more comfortable interfaces and consistency checks for dataflow networks, task cancellation support and better error checking for the network plugin, and an option that allows the task scheduler to reuse the main thread for improved performance. Also, we resolved a number of mostly minor warnings reported by Grammatech’s CodeSonar tool and fixed a few bugs. As usual, a complete list of changes can be found in the CHANGELOG.

07 December 2015

Performance of OpenMP Task Parallelism

Researchers from the University of Houston have developed an approach for translating parallel OpenMP programs to the Multicore Task Management API (MTAPI). In their paper Deploying OpenMP Task Parallelism on Multicore Embedded Systems with MCA Task APIs, which was presented at 17th IEEE International Conference on High Performance Computing and Communications (HPCC), the authors describe the design of an appropriate runtime library (RTL) and compare the performance with state-of-the-art solutions. Interestingly, the RTL based on the MTAPI implementation provided by EMB² has the least task overhead for more than eight cores and scales much better than the widely used GCC-based implementation for the SparseLU benchmark.

04 December 2015

Presentation at ESE Kongress 2015

One of the unique features of the Multicore Task Management API (MTAPI) is support for heterogeneous hardware architectures, e.g., systems-on-a-chip integrating accelerators like GPUs or DSPs together with a multicore CPU on a single die. The different hardware units, called nodes in MTAPI terminology, need not even have access to shared memory and may transparently communicate via message passing. In a presentation held at the Embedded Software Engineering Kongress, Tobias Schüle explained the key concepts of MTAPI and showed how they help to abstract from the underlying hardware platforms. A summary of these concepts can be found in the paper (written in German) published in the conference proceedings.

27 November 2015

EMB² Version 0.3.2

The latest version comes with various updates of the containers, such as a completely reworked and optimized implementation of hazard pointers as well as improved interfaces for the pools. A list of all changes can be found here.

01 July 2015

EMB² Version 0.3.1

Version 0.3.1 is here! Feedback is more than welcome ;-)

09 April 2015

EMB² Version 0.3.0

We are happy to announce a major update of EMB²: Version 0.3.0 now covers the full MTAPI standard, which includes basic support for heterogeneous systems. Specialized hardware components such as GPUs or DSPs can be integrated via plugins. Currently, EMB² comes with two ready-to-use plugins, one for OpenCL-capable devices and another one for distributed systems connected via network. Using the built-in load balancer, it is not even necessary to specify where a given set of tasks shall be executed. Besides support for heterogeneous systems, this version also includes a number of changes and improvements.

03 March 2015

EMB² Version 0.2.3

Exactly one month after the last release, Version 0.2.3 of EMB² is now available. As usual, detailed information about bug fixes and improvements can be found in the CHANGELOG.

27 February 2015

Presentation at Embedded World Conference 2015

The Embedded World is one of the largest international fairs for embedded systems. This week, Tobias Schüle gave a talk at the associated conference, which is a perfect forum for knowledge transfer spanning the entire spectrum of hardware, software, and tools for the development of embedded systems. The talk gave an introduction to parallel programming on embedded systems and described the main features of MTAPI / EMB² by means of simple examples. The paper published as part of the conference proceedings is now available for download.

03 February 2015

EMB² Version 0.2.2

We just released a maintenance update of EMB². A list of all changes can be found here.

08 December 2014

Interview with Markus Levy, The Multicore Association

The primary objective of the Multicore Association (MCA) is to define and promote open specifications to enable multicore product development. In an interview with Embedded Computing Design, MCA’s president Markus Levy discusses the challenges of multicore software development and how to get vendors to work together in order to create industry-standard solutions.

11 October 2014

EMB² Committed to FreeBSD Ports Tree

Thanks to Thomas Z. aka Riggs, EMB² has been committed to the FreeBSD ports tree. If that wasn’t fast…

10 October 2014

EMB² Version 0.2.1

Version 0.2.1, which fixes some issues of the previous release and contains a number of improvements, is now available.

02 October 2014

Open Source Release of EMB²

We are excited to announce the first open source release of EMB², which can be downloaded here. Stay tuned by subscribing to the EMB² announcements mailing list.