Author: Matthijs van Waveren

Embedded systems are used in fields as diverse as telecommunication systems, robotics, automotive, and medical applications. They are very heterogeneous and consist of multicore systems and accelerators.  To exploit the capabilities that the hardware offers, software developers are expected to handle many of the low-level details of programming. This makes programming embedded systems in an efficient way a huge challenge.

The state of the art of embedded systems software development involves solutions where the software toolchain is highly vendor-specific. This ties the software to a particular hardware, leaving no room for portability. On top of that, some hardware vendors don’t allow for portability even between the different solutions within their own product portfolios.

The OpenMP API is a solution for solving this portability problem. The OpenMP API provides a path for parallelizing work across the cores of a multicore system, for offloading work from a host to an accelerator, and for creating tasks that carry out work on different units of the embedded system. And since it is a widely accepted industry standard, the OpenMP API ensures that the code can run on multiple embedded system platforms.

Work is offloaded from the ARM processor to the Digital Signal Processors (DSP) using OpenMP target offload

An example of the usage of the OpenMP API in the automotive field has been described in a previous blog post. The embedded systems used in that application were NVIDIA’s AGX Xavier platform and the Intel Harcuvar platform. Another example of an embedded system that has adopted the OpenMP API is the Texas Instruments KeyStone multicore processor.

Using the OpenMP API for programming embedded systems starts with the advantage of an easy-to-use environment, resulting in software portable across different platforms.