Overall Objectives
Research Program
Application Domains
New Software and Platforms
New Results
Bilateral Contracts and Grants with Industry
Partnerships and Cooperations
XML PDF e-pub
PDF e-Pub

Section: New Software and Platforms

Dynamic Dependence Graph (DDG)

By instrumenting the memory accesses, at the LLVM IR level, of a hand selected region of a program, the DDG tool builds a graph with all dynamic instructions. Each instruction, i.e. a node in the graph, is identified by a statement identifier, mapping the dynamic instruction to a static statement, and an induction vector, containing the trip counters of loops surrounding the related statement. Edges connecting these nodes represent either data dependence, reuse or anti-dependence among the instructions, obtained by using the shadow memory technique, that labels ownership to a given written memory position to a dynamic instruction, and creating relationship to it to instructions that read the exact same memory position. Instructions that have a statically known formula (SCEVs) are not tracked, allowing our technique to remove, for example, obvious dependencies from a loop iteration to the next, and still track integer instructions. As the number of dynamic instructions, even in very simple applications, grows extremely fast, the generated graph does not to fit in main memory just after a few hundred loop iterations, our tool allows limiting the number of loop iterations that are tracked. Dependencies between iterations outside the observed iteration space can either be ignored or clamped as being generated by a single instruction. The generated graph can be used to guide loop optimizers, that could not extract precise dependencies. It can also be used by performance debugging tools, in order to determine if it is possible to obtain a new instruction schedule that would improve locality.