Insieme Architecture Overview

Overview of Insieme

Insieme is a modular compiler composed of four main components: frontend, intermediate representation, backend and runtime.

The frontend

translates input code written in C or (partially) C++ into a parallel intermediate representation called Inspire. OpenMP annotations and OpenCL kernels are supported, and MPI support will be added in the future.

Inspire

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

The backend

generates standard C99 -- and optionally OpenCL -- code that interacts with the Insieme runtime to make full use of the available hardware resources.

The runtime

makes use of multiple worker threads to distribute tasks locally, and also supports pushing and pulling tasks over the network on clusters. 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.