Tutorials


[Back to workshops]

ILDJIT: Hands-On ILDJIT 2.0 for Static and Dynamic Program Analysis and Transformation


ILDJIT is a mature, open source, publicly available compilation framework that includes both static and dynamic compilers. Examples of well known benchmark suites supported by ILDJIT are SPEC CPU2000, SPEC CPU2006, MiBench and PARSEC. ILDJIT provides a plugin-based framework for static, as well as dynamic tasks like code translation, code analysis, code optimization, runtime instrumentation and memory management. Its plugin-based framework allows users to easily customize execution both at installation time and at run-time (by dynamically loading and unloading plugins without perturbing execution). Moreover, its multi-threaded design allows novel introspection of parallel compilation strategies to reduce overheads and dynamically optimize running code on today's x86 multi-core systems. The framework provides a rich intermediate language (IR), which users can exploit inside their own extensions. ILDJIT allows users to choose which extensions to execute at static time and which ones to execute at runtime. In order to simplify the implementation of high level code analysis, IR includes both simple RISC-like instructions (e.g. load, store, add) and high level operations. High level operations include both classic thread synchronization tasks, such as wait for another thread, create thread, memory barriers and memory management tasks, such as create a new array, free a piece of memory and create a new aligned piece of memory. ILDJIT supports the CIL language, which includes the full information of the source language by having a rich set of metadata. Nowadays, several source languages are successfully translated to CIL including C, C++, C#, Java, Python and LISP. Hence, by providing the full support of the complex CIL language, ILDJIT is able to manage, analyze and optimize all of the above languages. Users of ILDJIT do not need to handle unnecessary details of the source language used because they can rely on the IR of ILDJIT to perform their tasks. We believe ILDJIT is useful to anyone interested in compilers and computer architecture research. It provides a platform for dynamically introspecting and performing code transformations on CIL bytecode programs. These management environments are emerging as the dominant front for run-time execution because of their platform-independent interoperability. In this tutorial, we demonstrate how users can exploit the ILDJIT framework for research-specific purposes. We will compare and contrast the ease of using ILDJIT relative to more commonly known tools like Pin and Dynamo. We will also demonstrate the ease of using ILDJIT relative to its CIL counterparts like Mono, DotNet and DotGNU that, while robust, are not well suited for research purposes. Design and development of software includes the monitoring of its runtime behaviors (e.g. for performance or memory usage evaluation), which depend on both the underlying platform and the compilation process. On the other hand, the design of new hardware includes evaluation of both its performance and power consumption while running software that expose typical workloads. Hence, both software and hardware evaluation need runtime analysis, which should also include static or dynamic software transformations.


Other information

  • Expected duration of the tutorial: full day
  • Morning: lectures and demos
  • Afternoon: hands-on exercises


Organizer short bio - Simone Campanoni is a research associate in Computer Science at Harvard University working with Prof. David Brooks and with Prof. Gu-yeon Wei. His work focuses on the boundary between hardware and software, relying on dynamic compilation, run-time optimizations and virtual execution environments for investigating opportunities on auto-parallelization. He is the author of the HELIX research project (http://helix.eecs.harvard.edu) and the ILDJIT compilation framework (http://ildjit.sourceforge.net).