Navigation: cTuning.org > CTools > ICI
In 1999 a new project (MHAOTEU) started to develop memory hierarchy analysis and optimization tools for large applications. It was based on iterative feedback-directed compilation to select fine-grain transformations and tune their parameters to improve the state-of-the-art compiler optimization heuristic. Grigori Fursin started working in this project together with Michael O'Boyle and Olivier Temam to develop efficient search strategies for iterative compilation in large optimization spaces. He had a painful experience using available at that time unstable source-to-source tools that couldn't parse the whole SPEC95/2000 or writing his own source-to-source transformation tools based on polyhedral representation (MARS developed at the University of Edinburgh and Manchester in 1998) to support loop tiling, splitting, unrolling, fusion/fission and array padding together with iterative compilation framework (EOS Framework).
In 2004 Grigori started working with Open64/PathScale compiler to compare its performance with iterative source-to-source compilation tools. Considering that Open64 already had all the above transformations, Grigori decided to stop developing his source-to-source transformation tools and develop an API instead to access all internal compiler optimizations and combine them with the external performance tuning tools thus reusing all the available stable compiler infrastructure and enabling tuning of the whole compiler optimization heuristic for a given architecture or program. In 2005 a first beta version of an Interactive Compilation Interface (ICI) for PathScale/Open64 and a new Framework for Continuous Optimizations to automatically select/tune individual transformations such as loop tiling, unrolling, fusion/fission, vectorization, register vectorization, array padding and prefetching, and to push out various analysis information have been released. Since then it has been used in a number of international research projects. However, extending ICI for Open64 compiler was complex particularly for loop reordering due to a non-modular compiler structure. Moreover, Open64 did not support many architectures at that time.
In 2006, when GCC 4.0 (that had a modular pass manager and supported many architectures) has been released, Grigori decided to port ICI to this compiler and enable third-party plugins to transform GCC into powerful research infrastructure where users could write their own optimization and analysis tools. Since then it became a standard research platform for the HiPEAC network of excellence, had been used in multiple international research projects including MILEPOST project to optimize programs and compilers for reconfigurable heterogeneous architectures using statistical analysis and machine learning (MILEPOST GCC paper), and had been extended by Cupertino Miranda and Zbigniew Chamski to its current state based on user feedback. It has been described in Since 2009 we are working with GCC community to move parts of the ICI to the new GCC plugin branch.
Currently ICI is a community-driven project to define common API to transform production-quality compilers with state-of-the-art transformations into collaborative modular plugin-enabled interactive R&D toolsets that allows quick prototyping of research ideas. In case the research idea becomes mature, it can now move to the mainline production compiler much faster. ICI can help end-users optimize their programs and architectures at fine-grain level to improve execution time, code size, power consumption, compilation time, etc. We also hope that using ICI will improve the quality and reproducibility of academic research. Eventually, we hope that it will help to overcome the complexity of current, emerging and future computing systems (including heterogeneous multi-core architectures) by simplifying and automating compiler design and testing as well as program optimization.
Here is a list of colleagues who contributed to ICI or provided feedback/ideas (in alphabetical order):
- Fabio Arnone (STMicro, France)
- Phil Barnard (ARC, UK)
- Francois Bodin (CAPS Entreprise, France)
- Zbigniew Chamski (InfraSoft IT Solutions, Poland)
- Albert Cohen (INRIA, France)
- Bjorn Franke (University of Edinburgh, UK)
- Grigori Fursin (UVSQ/INRIA, France)
- Taras Glek (Mozilla, USA)
- Hugh Leather (University of Edinburgh, UK)
- Cupertino Miranda (INRIA, France)
- Mircea Namolaru (IBM, Israel)
- Diego Novillo (Google, USA)
- Sebastian Pop (AMD, USA)
- Joern Rennecke (UK)
- Basile Starynkevitch (CEA, France)
- Ayal Zaks (IBM, Israel)