Skip to content
Tommy McMichen edited this page May 26, 2022 · 1 revision

Overview

The goal of NOELLE is to provide abstractions and functionalities that enable and simplify the implementation of complex code analyses and transformations, referred to as custom tools, which target wide program scopes. Custom tools built upon NOELLE include LLVM passes that work at the IR level to perform their code analyses and transformations. Most abstractions NOELLE provides are either not available in LLVM or they significantly extend those provided by LLVM.

Abstractions

PDG

NOELLE provides the Program Dependence Graph (PDG) representation of a program. We made the design choice of enabling users to obtain a PDG at different code granularities (e.g., dependencies between single instructions or single loops). This enabled NOELLE’s users to specialize their use of NOELLE for their specific needs. This is obtained by providing the ability to change the semantics of a node in the graph (e.g., single instruction, single loop, single SCC) as well as by allowing users to request the PDG of a subset of the program’s code.

SCCDAG

Advanced code transformations like parallelization techniques can be implemented as different strategies to schedule instances of the nodes that compose the SCCDAG of a loop. For instance, HELIX distributes instances of a given SCCDAG node around the cores. DSWP instead distributes nodes of an SCCDAG between cores while keeping all instances of a given node within the same core. Hence, an important abstraction is the SCCDAG, which NOELLE provides. Building this abstraction upon NOELLE’s dependence graph enabled the SCCDAG of a given loop to be a complete description of loop dependencies, including those with the rest of the program, and users can now change the granularity of the graph from SCC to instructions if needed.

Under Construction

Clone this wiki locally