Esquema Caractersticas compilador Organizacin y componentes WHIRL y

  • Slides: 32
Download presentation
Esquema • • • Características compilador Organización y componentes WHIRL y tabla de símbolos

Esquema • • • Características compilador Organización y componentes WHIRL y tabla de símbolos Organización directorios Ejecución Pro 64 Referencias

SGI Pro 64 • • • Compilador/Optimizador Lenguajes C, C++, F 90/95 Basado en

SGI Pro 64 • • • Compilador/Optimizador Lenguajes C, C++, F 90/95 Basado en MIPSpro Genera código para IA-64 Última versión 0. 13

Modelo lógico de compilación

Modelo lógico de compilación

Componentes del Pro 64 • Front ends • Analizador y optimizador interprocedural • Optimizador

Componentes del Pro 64 • Front ends • Analizador y optimizador interprocedural • Optimizador y paralelizador de bucles • Optimizador global • Generador de código Back end

Flujo de datos entre componentes

Flujo de datos entre componentes

Front ends • C basado en gcc • C++ basado en g++ • Fortran

Front ends • C basado en gcc • C++ basado en g++ • Fortran 90/95 de MIPSpro

WHIRL • Representación intermedia. • Diseñada para soportar múltiples lenguajes y plataformas. • Interfase

WHIRL • Representación intermedia. • Diseñada para soportar múltiples lenguajes y plataformas. • Interfase común entre las distintas etapas. • Un solo IR con cinco niveles de representación. – Descenso progresivo de nivel a medida que avanza la compilación. construcciones del lenguaje IR alto nivel IR bajo nivel muchas pocas longitud secuencias de código cortas largas estructura plana jerárquica

IPA: Anl. opt. interprocedural H WHIRL • Dos etapas – Local: Recopilar información de

IPA: Anl. opt. interprocedural H WHIRL • Dos etapas – Local: Recopilar información de cada archivo. – Principal: Análisis y optimización considerando todo el conjunto de archivos.

IPA: Modelo de compilación

IPA: Modelo de compilación

IPA: Etapa principal • Compuesta por dos fases – Análisis – Optimización • •

IPA: Etapa principal • Compuesta por dos fases – Análisis – Optimización • • inlining cloning dead function and variable elimination constant propagation

LNO: Optimizador/paralelizador de bucles H WHIRL • Análisis de dependencias a nivel de bucle.

LNO: Optimizador/paralelizador de bucles H WHIRL • Análisis de dependencias a nivel de bucle. • Transformaciones a nivel de bucle para un sólo procesador. Open. MP Paralelización automática

LNO: Transformaciones a nivel de bucle –Loop Fission –Loop Peeling –Loop Fusion –Loop Tiling

LNO: Transformaciones a nivel de bucle –Loop Fission –Loop Peeling –Loop Fusion –Loop Tiling –Unroll and Jam –Data prefetching –Loop Interchange

WHIRL 2{c, f} • Permite observar las transformaciones realizadas. • No siempre es posible

WHIRL 2{c, f} • Permite observar las transformaciones realizadas. • No siempre es posible compilar el código generado.

WOPT: Optimizador global • Optimizaciones globales tradicionales: – Dead code elimination – Partial redundancy

WOPT: Optimizador global • Optimizaciones globales tradicionales: – Dead code elimination – Partial redundancy elimination – Strength reduction – Induction variable elimination – Register variable identification –. . .

WOPT: Optimizador global • Algoritmos basados en SSA (Static Single Assignment) – Cada variable

WOPT: Optimizador global • Algoritmos basados en SSA (Static Single Assignment) – Cada variable aparece como el destino de una sola asignación. – Simplifica algunas optimizaciones. – Se construye una sola vez. – Los algoritmos de optimización la preservan.

CG: Generador de código

CG: Generador de código

Esquema • Características compilador • Organización y componentes Ø WHIRL y tabla de símbolos

Esquema • Características compilador • Organización y componentes Ø WHIRL y tabla de símbolos • Organización directorios • Ejecución Pro 64 • Referencias

WHIRL: niveles

WHIRL: niveles

WHIRL: niveles

WHIRL: niveles

WHIRL: Estructura de datos • Estructura en árbol • Cada nodo contiene: operador tipo

WHIRL: Estructura de datos • Estructura en árbol • Cada nodo contiene: operador tipo resultado tipo operandos número de hijos map_id (mecanismo para info. adicional) otros (según tipo de operador)

WHIRL: Ejemplo VH WHIRL while( i < 5 ) { sum += i; i++;

WHIRL: Ejemplo VH WHIRL while( i < 5 ) { sum += i; i++; } i £ 4 sum= i= + + i i 1

Tabla de símbolos • • Formada por un conjunto de distintas tablas Globales o

Tabla de símbolos • • Formada por un conjunto de distintas tablas Globales o locales: ST_TAB, . . . Sólo globales: PU_TAB, TY_TAB, . . . Sólo locales: LABEL_TAB, PREG_TAB

Tabla de símbolos: visibilidad • Cada función se encuentra en un determinado nivel de

Tabla de símbolos: visibilidad • Cada función se encuentra en un determinado nivel de anidamiento. • Acceso a las tablas de cada nivel a través de un array global. 0 1 2 3. . . reservado tablas globales tablas procedimiento no anidado tablas procedimiento anidado

Tabla de símbolos: Ejemplo main (2) ST_TAB sum i global (1) ST_TAB PU_TAB main

Tabla de símbolos: Ejemplo main (2) ST_TAB sum i global (1) ST_TAB PU_TAB main visibilidad=2 PU_IDX TY_TAB TY_IDX I 4 TYLIST_ IDX kind_ func TYLIST_ IDX TYLIST_ TAB TY_IDX 0

Esquema • Características compilador • Organización y componentes • WHIRL y tabla de símbolos

Esquema • Características compilador • Organización y componentes • WHIRL y tabla de símbolos Ø Organización directorios • Ejecución Pro 64 • Referencias

Organización directorios

Organización directorios

Organización de directorios (back-end)

Organización de directorios (back-end)

Ejecución: NUE/Ski • Ski: Simulador IA-64 – Simulación funcional. – Ejecución secuencial. • NUE:

Ejecución: NUE/Ski • Ski: Simulador IA-64 – Simulación funcional. – Ejecución secuencial. • NUE: Native User Environment – Permite desarrollo programas IA-64 en una máquina IA-32. – Compilador (no optimiza), ensamblador, enlazador y librerías.

Ejecución: comandos básicos • nue: entrar en Native User Environment. • bski -forceuser: ejecutar

Ejecución: comandos básicos • nue: entrar en Native User Environment. • bski -forceuser: ejecutar simulador IA-64 (también ski/xski). • sgicc/sgi. CC/sgif 90: ejecutar compilador Pro 64. • whirl 2 c/whirl 2 f: generar archivos c o Fortran a partir de la representación intermedia. • ir_b 2 a: traducir representación intermedia a formato ASCII.

Ejecución: SPEC 2000 • Compilación: -O 2 • Entrada: test 168. wupwise 03: 46:

Ejecución: SPEC 2000 • Compilación: -O 2 • Entrada: test 168. wupwise 03: 46: 49 171. swim 00: 19: 04 172. mgrid 06: 03: 09 164. gzip 00: 28: 19 173. applu 00: 07: 44 175. vpr 00: 39: 59 177. mesa 01: 33 176. gcc 00: 09: 55 178. galgel 01: 07: 17 181. mcf 00: 01: 12 179. art 00: 38: 26 186. crafty 01: 40 183. equake 00: 22: 00 197. parser 00: 35: 36 187. facerec 00: 53: 14 252. eon 00: 19: 28 254. gap 00: 13: 22 188. ammp 189. lucas 01: 44: 56 253. perlbmk 191. fma 3 d 00: 06 255. vortex 02: 07: 30 200. sixtrack 03: 06: 40 256. bzip 2 00: 55: 17 301. apsi 02: 09: 57 300. twolf 00: 16: 41

Tamaño del código • Un orden de magnitud respecto a Simple. Scalar líneas archivos

Tamaño del código • Un orden de magnitud respecto a Simple. Scalar líneas archivos Pro 641 Simple. Scalar Pro 642 gcc 3. 0 2. 313. 324 192. 325 3. 362. 287 2. 538. 163 2. 467 129 8. 218 Pro 641: sólo common, front-ends, ipa, be e ir_tools. Simple. Scalar: fuentes del simulador sin directorios test. Pro 642: fuentes completas, excepto linker gcc 3. 0: fuentes completas 9. 848

Referencias • WHIRL Intermediate Language Specification • WHIRL Symbol Table Specification • Tutorial on

Referencias • WHIRL Intermediate Language Specification • WHIRL Symbol Table Specification • Tutorial on the SGI Pro 64 compiler infrastructure. Gao, Amaral, Dehnert, Towle • Pro 64: Performance Compilers for IA-64. Dehnert • Lista de distribución Pro 64: http: //sourceforge. net/projects/open 64 • Introducción al Compilador Pro 64