Download Latest Version MILEPOST GCC became a part of cTuning CC (303 Bytes)
Email in envelope

Get an email when there's a new version of Interactive Compilation Interface

Home / GCC-ICI / V1.0
Name Modified Size InfoDownloads / Week
Parent folder
GCC-ICI-1.0.tar.gz 2008-06-15 12.2 MB
GCC-ICI-1.0-README.txt 2008-06-15 9.9 kB
patch-gcc-4.2.2-ici-1.0-20080615 2008-06-15 36.4 kB
patch-gcc-4.3.0-ici-1.0-20080615 2008-06-15 39.9 kB
Totals: 4 Items   12.3 MB 0
****************************************************************
GCC-ICI v1.0 (Interactive Compilation Interface)

June 15, 2008

http://gcc-ici.sourceforge.net

Maintained by UNIDAPT Group
http://unidapt.org

****************************************************************
Developers:

 Grigori Fursin, INRIA Saclay, France 
  http://fursin.net/research

 Mircea Namolaru, IBM Haifa, Israel

 Cupertino Miranda, INRIA Saclay, France
  cupertino.miranda@inria.fr

****************************************************************
Brief Information:

 The main aim of the Interactive Compilation Interface (ICI)
 is to transform GCC (production quality non-research compiler 
 that supports many languages and architectures) into research 
 compiler with minimal changes. 
 
 It can be used to enable research on iterative fine-grain program 
 optimizations for different constraints (performance, code size, 
 power consumption, DSE, different ISAs, etc), 
 to unify optimization knowledge reuse among different programs 
 and architectures using statistical and machine learning techniques, 
 and to improve default compiler optimization heuristic.

 We hope that it will eventually make compilers truly modular 
 with automatically tuned rapidly evolving optimization heuristics.

 In a new version we re-designed the ICI completely based on the 
 valuable feedback from the users after the SMART'07 workshop and 
 GCC HiPEAC'07 tutorial (many thanks to Cupertino Miranda 
 who implemented most of it). The communication with the new ICI 
 is now performed through a dynamically linked GCC plugin written 
 in C (however any high-level or scripting language can be used 
 with a wrapper). Current implementation includes the ability 
 to reorder or add GCC passes dynamically on a function level. 
 We currently work to implement all remaining functions 
 of the specified interface, add passes to extract program
 features and split analysis and optimization code to enable 
 access to compiler transformations at a fine-grain level.

****************************************************************
Directories:

 docs                            - GCC-ICI documentation
  |
  +-- papers                     - Our related papers
  +-- posters                    - Our related posters
  +-- ici-headers
       |
       +-- ic-interface.h        - ICI specification
       +-- ic-controller.h       - ICI controller header file

 examples                        - Sample benchmarks to demonstrate ICI and plugins
                                   (currently dynamic pass manipulation and optimization)
     
 src                             - GCC and PLUGINS sources
  |     
  +-- gcc                        - GCC source directory (not included)
  |                                Current work version is 4.3.0 20070711 
  |			           (experimental)
  +-- gmp-4.2.1                  - Third-party package for GCC
  +-- gmp-4.2.2                  - Third-party package for GCC
  +-- mpfr-2.3.1                 - Third-party package for GCC
  +-- ici-plugins                - Directory with plugins
       |
       +-- save_executed_passes
       +-- save_pass_order
       +-- use_pass_order
       ...
       
 tools                           - Auxilary tools

 install                         - Directory with installed binaries

****************************************************************
Usage:
 First, get GCC sources and place them to the src/gcc directory
  http://gcc.gnu.org

 Patch the GCC code with GCC-ICI using
  patch--apply

 Compile third-party tools, GCC source and Dynamic Controller using
  build-all

 All the binaries and libraries will be installed in the following directories
  install/bin                  #GCC BINS
  install/lib                  #GCC LIBS
  install/gcc-ici-plugins      #PLUGINS
  ...

 Set environment variables:
  export GCC-ICI-HOME = [GCC-ICI home directory (full path)]

  export PATH = $GCC-ICI-HOME/install/bin:$PATH
  export LD_LIBRARY_PATH = $GCC-ICI-HOME/install/lib:$LD_LIBRARY_PATH

 To compile programs using GCC-ICI and Dynamic Controller 
  with plugin to save current pass order, use:

  export ICI_PLUGIN=$GCC-ICI-HOME/install/gcc-ici-plugins/save-executed-passes.so

  gcc -fici <files to compile>
   or 
  export ICI_USE=1

  gcc <files to compile>

 Auxilary environment variables:
  ICI_VERBOSE != NULL - turn on diagnostic messages

****************************************************************
History:
 1.0   - 20080615 - New version with bug fixes for MILEPOST GCC. ICI Plugins are separated 
                    from this distribution since they can be independent of GCC.
                    Machine learning routines will be included in the MILEPOST GCC release.
                    More info is available at http://unidapt.org/software.html#milepostgcc

 0.9.6 - 20080312 - Updated version for the MILEPOST GCC
                    (was not officially released).

 0.9.5 - 20080211 - Updated design for correct pass selection and reordering
                    avoiding pass-gate ... + some bug fixes.

 0.9.1 - 20070916 - Bug fix release.

 0.9   - 20070915 - New design using dynamically linked plugins
                    and pass manipulations routines.

 0.1   - 20070126 - Prototyping
 
 0.0.1 - 20061103 - First prototype based on PathScale/Open64 ICI
                    developed by Grigori Fursin in 2004.

****************************************************************
Motivation:

 Current compilers fail to deliver satisfactory levels of performance on
 modern processors, due to rapidly evolving hardware, fixed and black-box
 optimization heuristics, simplistic hardware models, inability to fine-tune
 the application of transformations, and highly dynamic behavior of the
 system. This analysis suggests to revisit the structure and interactions of
 optimizing compilers. Building on the empirical knowledge accumulated from
 previous iterative optimization prototypes, we propose to open the compiler,
 exposing its control and decision mechanisms to external optimization
 heuristics. We suggest a simple, practical, and non-intrusive way to modify
 current compilers, allowing an external tool to access and modify all
 compiler optimization decisions.

 To avoid the pitfall of revealing all the compiler intermediate
 representation and libraries to a point where it would rigidify the whole
 internals and stiffen further evolution, we choose to control the decision
 process itself, granting access to the only high-level features needed to
 effectively take a decision. This restriction is compatible with our
 fine-tuning and fine-grained interaction, and allows to tune programs for
 best performance, code size, power consumption; we also believe it allows
 for joint architecture-compiler design-space exploration.By exposing only
 the decisions that arise from the opportunities suggested by the program
 syntax and semantics and only when the associated legality checks are
 satisfied, we dramatically reduce the transformation search space.

 We are developing an Interactive Compilation Interface (ICI) with different
 external optimization drivers for GCC to enable optimization of large
 applications (rather than just kernels) through the iterative, fine-grain
 customization of compilation strategies at the loop or instruction-level.We
 expect that iterative interactive compilers will replace the current
 multiplicity of non-portable, rigid transformation frameworks with
 unnecessary duplications of compiler internals. Furthermore, unifying the
 interface with compiler passes simplifies future compiler developments,
 where the best optimization strategy is learned automatically and
 continuously for a given platform, objective function, program or
 application domain, using statistical or machine learning techniques. It
 enables life-long, whole-program compilation research, without the overhead
 of breaking-up the compiler into a set of well-defined compilation
 components (communicating through persistent intermediate languages), even
 if such an evolution could be desirable at some point (but much more
 intrusive). It also opens optimization heuristics to a wide area of
 iterative search, decision and adaptation schemes and allows optimization
 knowledge reuse among different programs and architectures for collective
 optimizations.

****************************************************************
Acknowledgments:

 Francois Bodin, IRISA, France
 Albert Cohen, INRIA Futurs, France
 Hugh Lather, University of Edinburgh, UK
 Mircea Namolaru, IBM, Israel
 Michael O'Boyle, University of Edinburgh, UK
 Sebastian Pop, AMD, USA
 Olivier Temam, INRIA Futurs, France

 HiPEAC network of excellence (http://www.hipeac.net)
 Milepost project (http://www.milepost.eu)
 SARC project (http://www.sarc-ip.org)
 GGCC (http://www.ggcc.info)

 Other colleagues from IBM, NXP, STMicro, ARC, CAPS Enterprise ...

****************************************************************
Future work:

 We need to decide on how to enumerate specific loops (in the loop nests) 
 and specific statements - could be in lexicographical order or using numbering
 similar to ones used at INRIA for polyhedral transformation framework. 
 Then we need to finish GCC-ICI implementation based on the available specification.
 
 Further, we plan to do research on automatically generating dependencies 
 between passes, learning best order of optimization passes, improving 
 our component model for passes to enable dynamic linking of external
 optimization plugins and eventually making compiler fully modular with
 automatically tuned rapidly evolving compiler optimization heuristic.

 The ICI for g++ is currently failing - we have to solve this problem
 and will appreciate any help.

****************************************************************
Source: GCC-ICI-1.0-README.txt, updated 2008-06-15