From cTuning.org

(Difference between revisions)
Jump to: navigation, search
Line 22: Line 22:
== ICI Events ==
== ICI Events ==
ICI events added to the framework for fine-grain tuning are documented here.
ICI events added to the framework for fine-grain tuning are documented here.
-
 
+
{| border="1" cellspacing="0" cellpadding="3" style="text-align:left; width:100%;"
 +
! Name !! Triggered in !! Description
 +
|-
 +
! "function_spec_loader"
 +
| <tt>cgraphunit.c</tt>
 +
| Special Event in <tt>ici_load_function_specific_optimizations</tt> function, this event is raised for every function in call graph.
 +
|}
== ICI Features ==
== ICI Features ==
=== New Features ===
=== New Features ===
ICI features added to the framework for fine-grain tuning are documented here.
ICI features added to the framework for fine-grain tuning are documented here.
-
{| border="1" cellspacing="0" cellpadding="3" style="text-align:left;"
+
{| border="1" cellspacing="0" cellpadding="3" style="text-align:left; width:100%;"
! Feature name !! Type of contents !! Description
! Feature name !! Type of contents !! Description
|-
|-
Line 457: Line 463:
|}
|}
-
 
-
== ICI Events ==
 
-
<!-- TODO: a table of events -->
 
-
 
== Adapt Plugin ==
== Adapt Plugin ==

Revision as of 06:43, 11 August 2009

Google Summer of Code 2009: fine-grain optimizations.

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.

Contents

ICI Fine-grain tuning work flow

Coming soon...

Compilation recording information to XML
Compilation recording information to XML
Compilation reusing information from XML
Compilation reusing information from XML


ICI Events

ICI events added to the framework for fine-grain tuning are documented here.

Name Triggered in Description
"function_spec_loader" cgraphunit.c Special Event in ici_load_function_specific_optimizations function, this event is raised for every function in call graph.

ICI Features

New Features

ICI features added to the framework for fine-grain tuning are documented here.

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 of ICI 2.0 Features

  • "function_filename" can be empty for functions generated by IPCP optimization (cp pass).

ICI Parameters

ICI Parameter with Type

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 gcc/highlev-plugin-internal.h and gcc/highlev-plugin.h:

/* Datatype of event parameter pointer  */
typedef enum
{
  EP_SILENT,
  EP_VOID,
  EP_CHAR,
  EP_UNSIGNED_CHAR,
  EP_INT;
  EP_UNSIGNED_INT,
  EP_LONG,
  EP_UNSIGNED_LONG
} event_parameter_type;

The representation of parameters is defined in file gcc/events.c:

/* 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 */
};

TODOs of ICI parameter

  • Implement ICI control information with ICI features, and remove EP_SILENT type.

ICI API

Parameter Management

register_event_parameter: register a new ICI parameter

Prototype void register_event_parameter (const char *name, const void* value, event_parameter_type type)
API level FICI0
Declared in highlev-plugin.h
Implemented in events.c
Inputs name: name of the parameter
value pointer to data
type type of data
Return value none
Description

Define a new ICI parameter named name, with a pointer value to some data of type. Trigger an internal compiler error (failed assertion) if name is invalid.

Prerequisites

name can be neither NULL nor an empty string. <type> is a valid type defined in event_parameter_type.

Outputs

See also

get_event_parameter_type

get_event_parameter_type: get the type of an ICI event parameter

Prototype event_parameter_type get_event_parameter_type (const char *name)
API level FICI0
Declared in highlev-plugin.h
Implemented in events.c
Inputs name: name of the parameter
Return value EP_VOID if the parameter was found;
otherwise, the type of parameter named name
Description

Get the type of an event parameter. Trigger an internal compiler error if no parameters were registered prior to calling this function.

Prerequisites

Parameter hash table must have been initialized prior to calling this function.

Outputs

Informational message if parameters hash table does not exists.

See also

register_event_parameter

Pass Management

run_pass: run a pass

Prototype void run_pass (const char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs name: name of the pass
Return value none
Description

Execute the pass registered with name prior to calling this function on current function. Warning: IPA passes should not be execute with this function, use run_ipa_passinstead.

Prerequisites

A pass of the specified name has been registered prior to calling this function.

Outputs

none

See also

run_ipa_pass

run_ipa_pass: run an IPA pass

Prototype void run_ipa_pass (const char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs name: name of the pass
Return value none
Description

Execute the IPA pass registered with name prior to calling this function on current function.

Prerequisites

An IPA pass of the specified name has been registered prior to calling this function.

Outputs

none

See also

run_pass


initialize_ici_pass_list: initialize a list of passes for ICI batch execution

Prototype void *initialize_ici_pass_list (int num)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs num: maximum number of passes.
Return value array of opt_pass pointers of size (num + 1).
Description

Initialize a list of NULL pointers of pass type.

Prerequisites

none

Outputs

none

See also

insert_ici_pass_list, run_ici_pass_list, run_ici_pass_list_per_function, delete_ici_pass_list

insert_ici_pass_list: insert a pass into ICI pass list

Prototype void insert_ici_pass_list (void *list, int *cursor, char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs list: a pointer to ICI pass list (an array of opt_pass pointers).
cursor: a pointer to an integer indicating the slot to insert pass into.
name: the name of the pass to be inserted.
Return value none
Description

Insert a pass named name into ICI pass list list at position specified by cursor, and then increase cursor by 1.

Prerequisites

An pass named name has been registered prior to calling this function.
The cursor indicates an empty slot in list.

Outputs

Informational message if the slot specified by cursor is not empty prior to calling this function.

See also

initialize_ici_pass_list, run_ici_pass_list, run_ici_pass_list_per_function, delete_ici_pass_list

run_ici_pass_list: execute an ICI pass list on current function

Prototype void insert_ici_pass_list (void *list, int *cursor, char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs list: a pointer to ICI pass list (an array of opt_pass pointers).
Return value none
Description

Execute an ICI pass list list on function being compiled.

Prerequisites

List is not empty and current function is specified in GCC.

Outputs

none

See also

initialize_ici_pass_list, insert_ici_pass_list, run_ici_pass_list_per_function, delete_ici_pass_list

run_ici_pass_list_per_function: execute an ICI pass list on current call graph

Prototype void insert_ici_pass_list (void *list, int *cursor, char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs list: a pointer to ICI pass list (an array of opt_pass pointers).
Return value none
Description

Execute an ICI pass list list on call graph functions one by one in 'top order'.

Prerequisites

List is not empty.

Outputs

none

See also

initialize_ici_pass_list, insert_ici_pass_list, run_ici_pass_list, delete_ici_pass_list

delete_ici_pass_list: delete an ICI pass list

Prototype void insert_ici_pass_list (void *list, int *cursor, char *name)
API level FICI0
Declared in pass-manager.h
Implemented in pass-manager.c
Inputs list: a pointer to ICI pass list (an array of opt_pass pointers).
Return value none
Description

Delete an ICI pass list list.

Prerequisites

List is not empty.

Outputs

none

See also

initialize_ici_pass_list, insert_ici_pass_list, run_ici_pass_list, run_ici_pass_list_per_function

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.

HOWTO

Adapt plugin is depends on Mini-XML 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, ICI_PLUGIN environment variable should be set to the path to the plugin library (.so), and gcc should be called with with either -fici flag or ICI_USE environment parameter.

Known Issue

none

Locations of visitors to this page