Alto a link time optimizer
Download
1 / 36

Alto: A Link Time Optimizer - PowerPoint PPT Presentation


  • 97 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.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha

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

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

  • Herramientas de compilación

    • Ictineo

    • IMPACT

    • GNU cc

    • ?

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


Tucson, AZ


Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


Qué es “Alto” ?

  • Optimizador de ejecutables Alpha/OSF1

Binario Alpha “mejorado”

alto

Binario Alpha


“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...

  • 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...

  • 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 outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


“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

  • 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

  • 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”

  • 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


-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 outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


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

  • 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

  • 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

caller

callee

call edge

init node

call node

link edge

return node

exit node

return edge


“Pseudo” funciones

caller

call edge

HELL

call node

hell node

link edge

return node

return edge

jsr r26,(r27)...


“Pseudo” funciones

jmp r31,(r28)

HELL

HELL-LITE

relocate basic block

relocate function

jsr r26,(r27)

call_pal callsys

CALL

PAL


Optimization phase

Hard

Optimizaciones aplicadas una sola vez

Easy Optimizations

#rounds

Hard Optimizations

#rounds

Easy

Optimizaciones sencillas iterativamente

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


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

  • Code layout

    • Dirigido por profiling (si disponible...)

  • Scheduling

    • 21164 oriented

    • Extended basic blocks

    • BB alignment

  • Generación de código


Talk outline

  • Introducción

  • Usando “Alto”

  • Fases de “Alto”

  • Modificando “Alto”


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


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

  • 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

  • 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

  • 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

#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 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);

}


The End


ad
  • Login