The era of increasing processor clock frequencies is over—hardware vendors are instead increasing the number of processor cores integrated on a single chip. Such multicore processors provide high performance, which enables novel applications, at low costs and reduced energy consumption. The latter is essential for battery-powered devices and systems with limited capabilities to dissipate heat.
Efficiently leveraging the performance of multicore processors requires to parallelize the applications. Using conventional techniques provided by the operating system, however, this is an intricate and error-prone task. The Embedded Multicore Building Blocks (EMB²) are a domain-independent open source C/C++ library that solves this problem by simplifying parallel programming. This way, EMB² helps to increase product quality and development productivity.
EMB² has been specifically designed for embedded systems and the typical requirements that accompany them such as real-time capability and predictable memory consumption. Running on a wide range of platforms, from small devices to embedded servers, it can be employed in a variety of products.
EMB² provides generic building blocks for compute-intensive applications like image recognition, signal processing, data analysis for IoT, or artifical intelligence. Typical domains include industrial automation, energy production and management, health care, smart cities, mobility, and consumer electronics.
EMB² abstracts from the heterogeneous nature of modern systems-on-a-chip containing accellerators like GPUs, DSPs or FPGAs through unified interfaces. This even allows to distribute work among multiple devices over network in a transparent way.
EMB² builds on the Multicore Task Management API, an international standard from the Multicore Association for leveraging task parallelism on embedded devices.
High-level patterns for common tasks such as parallel loops and C++ wrappers for MTAPI make EMB² easy to use, thus reducing the effort for refactoring existing code.
You can extend EMB² by writing your own plugins if the included ones for OpenCL, CUDA, and network sockets are not sufficient for your purposes. Furthermore, you can implement your own task schedulers and define custom task attributes.
Via the included abstraction layer, EMB² can be easily ported to operating systems and processor architectures not yet supported out of the box. It can even be used with older compilers that do not implement the latest C++ standards.
To achieve high code quality, development of EMB² is subject to a number of measures regularly tracked via continuous integration: zero compiler warnings, adherence to coding style, unit tests with more than 90% statement coverage, rule checking, and static analysis. Moreover, parts of the code have been formally verified.
EMB² is open source software which allows you to modify and extend it according to your needs. Moreover, its permissive, industry-friendly license (BSD 2-clause) facilitates commercial use.
We follow the best practices of the Linux Foundation’s Core Infrastructure Initiative. The associated badge program defines an open source maturity model which aims to foster development of safe and secure software.