Alto a link time optimizer
This presentation is the property of its rightful owner.
Sponsored Links
1 / 36

Alto: A Link Time Optimizer PowerPoint PPT Presentation


  • 64 Views
  • Uploaded on
  • Presentation posted in: General

Alto: A Link Time Optimizer. Edición y optimización de ejecutables Compaq Alpha Manel Fernández. Motivación. Linea CAP Arquitectura de computadores Modificaciones en el “hardware” Evaluación mediante simuladores Cómo aplicar la tecnología de compilación a nuestro trabajo?. Motivación.

Download Presentation

Alto: A Link Time Optimizer

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Alto a link time optimizer

Alto: A Link Time Optimizer

Edición y optimización de ejecutables Compaq Alpha

Manel Fernández


Motivaci n

Motivación

  • Linea CAP

    • Arquitectura de computadores

    • Modificaciones en el “hardware”

    • Evaluación mediante simuladores

  • Cómo aplicar la tecnología de compilación a nuestro trabajo?


Motivaci n1

Motivación

  • Herramientas de compilación

    • Ictineo

    • IMPACT

    • GNU cc

    • ?

  • Es necesario un cambio tan “drástico” en nuestra metodología?


Tucson az

Tucson, AZ


Talk outline

Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Talk outline1

Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Qu es alto

Qué es “Alto” ?

  • Optimizador de ejecutables Alpha/OSF1

Binario Alpha “mejorado”

alto

Binario Alpha


Alto para qu

“Alto”... para qué ?

  • Edición de binarios

    • Instrumentación ¨Ad-hoc¨

    • Visualización de código

  • Compilación a bajo nivel

    • Alto IR es el Alpha ISA

    • Optimizaciones “hardware-oriented”


A favor

A favor...

  • Código fuente disponible

  • Eliminación del “front-end”

    • Fichero de entrada: ejecutable

      • Independencia del lenguaje de programación

  • Funcionamiento con/sin “profiling”

  • No hay cambios en la metodología!


En contra

En contra...

  • Código en fase de desarrollo

    • Zonas de código “inhibido”

    • No es portable

  • Binario final no ¨pixificable¨

  • Consume muchos recursos

    • Ej: Spec95 - 126.gcc

      • >1/2 Gb de memoria (xdisk)

      • 20-30´ de compilación


Talk outline2

Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Instalaci n

“Alto” URL

http://www.cs.arizona.edu/alto

Última release pública: Agosto 1999 !!

Ejecutables

alto

{profadder}

{profdump}

Instalación

  • Compilación

    • more README

    • vi Makefile

    • ...

    • gmake headers

    • gmake


Benchmarks

Benchmarks

  • Binarios de entrada

    • Compilados estáticamente

    • Con “rellocation information”

  • Limitaciones de “Alto”

    • Mejor preparado para código 21164

      • arch ev5

    • Global Pointer (GP) único


Compilaci n de benchmarks

Compilación de benchmarks

  • Opciones de compilación

    • cc -Wl,-r -Wl,-d -Wl,-z -non_shared

    • f77 -Wl,-r -Wl,-d -Wl,-z -non_shared

    • gcc -Wl,-r -Wl,-d -Wl,-z -static

    • g++ -Wl,-r -Wl,-d -Wl,-z -static

    • chmod +x ...


Invocando alto

Invocando “Alto”

  • Optimizar un ejecutable

    • alto -i <ifile> -o <ofile>

  • Opciones de invocación

    • +300 “valores” no documentados!!!

    • Ej: alto -V Phase+Status …

Opción

Concatenador

de valores

Valor

Valor


Opciones tiles

-V Phase+Status+...

-P Loop+Bbl+Fun+...

-T Preproc+Postasm+...

-O Peep+Inline+...

-r <number>

-C <number>

-L Sensitive|...

-M Crit|Path|...

-p Bbl+Fun+...

Verbose info

Print “what”

Print “when”

Disable optimizations

Number of rounds

Cache size (#instr)

Liveness method

Inline method

Profile “what”

Opciones útiles


Talk outline3

Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Bibliograf a

Bibliografía… :-)

  • Bibliografía básica

    • Aho, Sethi, Ullman. Compilers - Principles, Techniques and Tools. Addison Wesley, 1986.

    • Muchnick. Advanced Compiler Design and Implementation. Morgan Kaufman, 1997.

  • “Alto” web page

    • Muth, Debray, Watt., De Boss. alto: A Link-Time Optimizer for the DEC Alpha. TR98-14, 1998.

    • Muth. alto: A Platform for Object Code Modification. PhD. Dissertation, 1999.


Fases del compilador

Fases del compilador

  • Loading phase

    • Lee el binario y contruye el CFG

  • Optimization phase

    • Optimizaciones locales/globales

  • Assembly phase

    • Generación de código

CFG: Control flow graph


Loading phase

Loading phase

  • Lectura del binario

    • “Rellocation information” (func & bbl)

  • Construcción del CFG

    • Algoritmo clásico

    • Funciones, BBs y aristas

    • Optimizaciones triviales

      • Elimina el cálculo del GP

      • Normaliza operaciones

      • ...


Construcci n del cfg

Construcción del CFG

caller

callee

call edge

init node

call node

link edge

return node

exit node

return edge


Pseudo funciones

“Pseudo” funciones

caller

call edge

HELL

call node

hell node

link edge

return node

return edge

jsr r26,(r27)...


Pseudo funciones1

“Pseudo” funciones

jmp r31,(r28)

HELL

HELL-LITE

relocate basic block

relocate function

jsr r26,(r27)

call_pal callsys

CALL

PAL


Optimization phase

Optimization phase

Hard

Optimizaciones aplicadas una sola vez

Easy Optimizations

#rounds

Hard Optimizations

#rounds

Easy

Optimizaciones sencillas iterativamente

Easy Optimizations


Easy optimizations

Register liveness analysis

Unreacheable code elimination

Peephole optimizations

Partial evaluation

Branch optimizations

Constant propagation

Jump table analysis

Copy propagation

Stack usage patterns

Alias analysis

Load/store avoidance

Code compression

Basic block replication

Inline small functions

Common subexpression elimination

Register renaming

Easy optimizations

liveness.c

opt.misc.c

peephole.c

eval.c

opt.branch.c

opt.constant.c

opt.switch.c

opt.propagation.c

opt.stack.c

aliasing.c

opt.loadstore.c

opt.compress.c

opt.dupbbl.c

opt.inline.c

opt.cse.c

opt.regrealloc.c


Hard optimizations

Shrink-wrapping

Cloning

Inlining

Value profiling

Code compression

Stack merging

Hard optimizations

  • Muchas de ellas inhibidas !!!

opt.shrinkwrap.c

opt.dupfun.c

opt.inline.c

opt.inline.indir.c

opt.inline.jumps.c

opt.valprof.c

factor.bbl.c

factor.prolog.c

opt.stack.c


Assembly phase

Assembly phase

  • Code layout

    • Dirigido por profiling (si disponible...)

  • Scheduling

    • 21164 oriented

    • Extended basic blocks

    • BB alignment

  • Generación de código


Talk outline4

Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Code guidelines

Code guidelines

  • Space-efficient (vs. speed)

    • Preferible recalcular a almacenar

    • Evita el uso de punteros

      • Manipulación de elementos sobre listas

      • Implementación de listas sobre vectores

  • Uso intensivo de macros !!!

    • Aumenta la legibilidad del código


Include files

Log information

Fun/BB/Instr flags

Register file definitions

All data structures & macros

COFF binary file management

ELF binary file management

Alpha ISA opcodes

(generado automaticamente de table.c)

Include files

error.h

flags.h

regs.h

global.h

system.coff.h

system.elf.h

opcode.h


Estructuras de datos

Estructuras de datos

  • Fichero global.h

  • Declaración de estructuras

    • Todo son arrays globales

      • Funciones / BBs / Instrucciones

    • Acceso a traves de macros

  • Declaración de macros

  • Declaración de límites de arrays

    • Mucha memoria - Recompilar ??!!


Command line options

Command line options

  • Módulo cmdline.c

  • Variable global

    • Valores por defecto para opciones

  • Declaración de arrays globales

    • Declaración estática !!!

    • Mejor si sustituimos por “malloc”´s...

  • Lectura de comandos


Alpha isa

Alpha ISA

  • Modulo table.c

    • Similar al alpha.def del SimpleScalar

    • wh64 missing!!!

0x10,

0x00,

I_addl,

“addl”,

IT_IOP,

RES_PC,

0,

PIPE_E0|PIPE_E1,

1,

1

Opcode number

Function number

Opcode name

Assembly name

Type

Resource usage

Resource definition

Pipeline usage

Latency average

Latency high


Ejemplo remove nops

Ejemplo: remove NOPs

#undef __PROC__

#define __PROC__ “OptEliminateNoops”

extern BOOL OptEliminateNoops(FILE *fp)

{

INDEX iins;

NUMBER kcount = 0;

BOOL verbose = HasOption(PRINT_OPT_VERBOSE,”Noop”);

FOREACH_LIVE_INS(iins)

{

if( AinsIsNoop(iins) ) /* kill noops */

{

if( verbose )

{

fprintf(fp,”\tKilling: “);

PrintIns(fp,iins);

}

kcount++;

AinsKill(iins);

}

...


Ejemplo remove nops1

Ejemplo: remove NOPs

...

/* kill useless moves */

if( AINS_CODE(iins) == I_lda &&

AINS_DATA(iins) == 0 &&

AINS_REG_B(iins) == AINS_REGC(iins) ) )

{

if( verbose )

{

fprintf(fp,”\tKilling: “);

PrintIns(fp,iins);

}

kcount++;

AinsKill(iins);

}

}

InfoStatus(fp,”\t[OptNoop] Killed Noops %d\n”, kcount);

return (kcount>0);

}


Alto a link time optimizer

The End


  • Login