From cTuning.org

(Difference between revisions)
Jump to: navigation, search
m
(Replacing page with ''''Common page for GSOC09 and other developments in summer 2009: function cloning, fine-grain optimizations, program instrumentation:''' ---- = Documentation Page = *[[CTool...')
Line 3: Line 3:
----
----
-
== Fine-grain optimization project ==
+
= Documentation Page =
-
Yuanjie Huang (ICT, China)
+
-
This project aims to provide fine-grain optimization selection and tuning abilities in GCC, and thus enable GCC to tune default optimization heuristic of the compiler or fine optimizations for a given program on a given architecture entirely automatically using statistical and machine learning techniques from the MILEPOST project.
+
*[[CTools:ICI:Projects:GSOC09:Fine_grain_tuning|Fine-grain optimization tuning]]
-
=== ICI Fine-grain tuning work flow ===
+
*[[CTools:ICI:Projects:GSOC09|Function cloning and program instrumentation]]
-
 
+
-
TODO
+
-
 
+
-
[[Image:ICI-adapt-record.gif|thumb|Compilation recording information to XML]]
+
-
 
+
-
[[Image:ICI-adapt-reuse.gif|thumb|Compilation reusing information from XML]]
+
-
 
+
-
<br style="clear: both" />
+
-
 
+
-
=== ICI Events ===
+
-
ICI events added to the framework for fine-grain tuning are documented here.
+
-
 
+
-
=== ICI Features ===
+
-
ICI features added to the framework for fine-grain tuning are documented here.
+
-
{| border="1" cellspacing="0" cellpadding="3" style="text-align:left;"
+
-
! Feature name !! Type of contents !! Description
+
-
|-
+
-
! "main_input_filename"
+
-
| array of strings, i.e., char **
+
-
| Name of the file which serves as the main input file of compiler .
+
-
|}
+
-
'''Known Issue on Current ICI Features'''
+
-
 
+
-
* "function_filename" can be empty for functions generated by IPCP optimization (cp pass).
+
-
 
+
-
=== ICI Parameters ===
+
-
ICI parameters now come with a type which should be declared when registering parameters in ICI, currently only a few basic C types are supported: void, char, unsigned char, int, unsigned int, long and unsigned long. A special type named EP_SILENT is introduced to pass parameters that is only used to pass status information to plugin; it's actually int, and is planned to be replaced by a elegant solution.
+
-
The parameter type is defined in <tt>gcc/highlev-plugin-internal.h</tt> and <tt>gcc/highlev-plugin.h</tt>:
+
-
<pre>
+
-
typedef enum
+
-
{
+
-
  EP_SILENT,
+
-
  EP_VOID,
+
-
  EP_CHAR,
+
-
  EP_UNSIGNED_CHAR,
+
-
  EP_INT;
+
-
  EP_UNSIGNED_INT,
+
-
  EP_LONG,
+
-
  EP_UNSIGNED_LONG
+
-
} event_parameter_type;
+
-
</pre>
+
-
The representation of parameters is defined in file <tt>gcc/events.c</tt>:
+
-
<pre>
+
-
/* Parameter structure.  */
+
-
struct event_parameter
+
-
{
+
-
  const char *name;            /* Name for the parameter */
+
-
  const void *value;          /* Pointer to data */
+
-
  event_parameter_type type;  /* Type enumeration of value */
+
-
};
+
-
</pre>
+
-
 
+
-
=== ICI API ===
+
-
==== ''register_event_parameter'': register a new ICI parameter ====
+
-
 
+
-
{| cellpadding="5"
+
-
| style="vertical-align:top" |
+
-
{| border="1" cellspacing="0" cellpadding="3" align="left" style="text-align:left" width="400px"
+
-
!Prototype
+
-
|<tt>void register_event_parameter (const char *name, const void* value, event_parameter_type type)</tt>
+
-
|-
+
-
!API level
+
-
| FICI0
+
-
|-
+
-
!Declared in
+
-
| ''highlev-plugin.h''
+
-
|-
+
-
! Implemented in
+
-
| ''events.c''
+
-
|-
+
-
!Inputs
+
-
| ''name:'' name of the parameter <br /> ''value'' pointer to data <br /> ''type'' type of data
+
-
|-
+
-
!Return value
+
-
| none
+
-
|}
+
-
| valign="top" | '''''Description'''''
+
-
 
+
-
Define a new ICI parameter named <tt>name</tt>, with a pointer <tt>value</tt> to some data of <tt>type</tt>.  Trigger an internal compiler error (failed assertion) if <tt>name</tt> is invalid.
+
-
 
+
-
'''''Prerequisites'''''
+
-
 
+
-
<tt>name</tt> can be neither <tt>NULL</tt> nor an empty string. <type> is a valid type defined in <tt>event_parameter_type</tt>.
+
-
 
+
-
'''''Outputs'''''
+
-
 
+
-
'''''See also'''''
+
-
 
+
-
[[ICI_Projects_GSOC09#get_event_parameter_type:_get_the_type_of_an_ICI_event_parameter|get_event_parameter_type]]
+
-
 
+
-
|}
+
-
 
+
-
 
+
-
==== ''get_event_parameter_type'': get the type of an ICI event parameter ====
+
-
 
+
-
{| cellpadding="5"
+
-
| style="vertical-align:top" |
+
-
{| border="1" cellspacing="0" cellpadding="3" align="left" style="text-align:left" width="400px"
+
-
!Prototype
+
-
|<tt>event_parameter_type get_event_parameter_type (const char *name)</tt>
+
-
|-
+
-
!API level
+
-
| FICI0
+
-
|-
+
-
!Declared in
+
-
| ''highlev-plugin.h''
+
-
|-
+
-
! Implemented in
+
-
| ''events.c''
+
-
|-
+
-
!Inputs
+
-
| ''name:'' name of the parameter
+
-
|-
+
-
!Return value
+
-
| <tt>EP_VOID</tt> if the parameter was found;<br>otherwise, the type of parameter named ''<tt>name</tt>''
+
-
|}
+
-
| valign="top" | '''''Description'''''
+
-
 
+
-
'''''Prerequisites'''''
+
-
 
+
-
Parameter hash table must have been initialized.
+
-
 
+
-
'''''Outputs'''''
+
-
 
+
-
Informational message if parameters hash table does not exists.
+
-
 
+
-
'''''See also'''''
+
-
 
+
-
[[ICI_Projects_GSOC09#register_event_parameter:_register_a_new_ICI_parameter|register_event_parameter]]
+
-
 
+
-
|}
+
-
 
+
-
 
+
-
=== Adapt Plugin ===
+
-
 
+
-
==== Description ====
+
-
 
+
-
Adapt plugin provides support for GCC pass sequence record/substitution, function-specific optimization tuning, function clone and instrumentation.
+
-
Plugins developed for fine-grain tuning are documented here. These plugins are developed to work with ICI-2.0 interface.
+
-
 
+
-
 
+
-
==== How to use ====
+
-
 
+
-
Adapt plugin is depends on MXML library, which provides XML reading and writing ability.
+
-
 
+
-
This plugin behaves differently depending on the ICI_ADAPT_CONTROL environmental variable, which can be either set to 1 to record information of current compilation into XML files or to 2 to reuse passes from XML files to perform passes substitution, function clone and other functionalities.
+
-
 
+
-
To use adapt plugin with ICI, <tt>ICI_PLUGIN</tt> environment variable should be set to the path to the plugin library (.so), and gcc should be called with with either <tt>-fici</tt> flag or <tt>ICI_USE</tt> environment parameter.
+
-
 
+
-
 
+
-
==== Known Issue ====
+
-
 
+
-
none
+

Revision as of 15:33, 10 August 2009

Common page for GSOC09 and other developments in summer 2009: function cloning, fine-grain optimizations, program instrumentation:


Documentation Page

  • Function cloning and program instrumentation
Locations of visitors to this page