Architecture Overview

Insieme consist of the Insieme Compiler, including the frontend, the intermediate representation INSPIRE and the backend, as well as the Insieme Runtime.

Insieme Compiler

Insieme Compiler

The frontend

The frontend translates input code into a parallel intermediate representation called INSPIRE. Supported programming languages currently include C; C++ (under development). For parallelism, Insieme supports AllScale API, OpenMP, Cilk.

INSPIRE

INSPIRE is a unified parallel representation that is optimized for high level transformations and analysis. It is mostly structural (as opposed to most nominal intermediate representations), which allows for better local decision making and analysis without having to consider the entire program. Another advantage is the ease with which multiversioning of functions and smaller components can be accomplished.

The backend

The backend generates standard C++14 -- and optionally OpenCL -- code that interacts with the Insieme Runtime to fully utilize the available hardware resources.

External Components

Clang is used in the frontend for parsing and validating the input languages. The generated source can be compiled by any C++14 compliant backend compiler.

Insieme Runtime

Insieme Runtime

The Runtime makes use of multiple worker threads to locally distribute tasks. It has knowledge about the system architecture and (optionally) previous runs of the program and bases its scheduling and optimization decisions on these facts, as well as the current state of the system and the program.