Title: Esquema
1Esquema
- Características compilador
- Organización y componentes
- WHIRL y tabla de símbolos
- Organización directorios
- Ejecución Pro64
- Referencias
2SGI Pro64
- Compilador/Optimizador
- Lenguajes C, C, F90/95
- Basado en MIPSpro
- Genera código para IA-64
- Última versión 0.13
3Modelo lógico de compilación
4Componentes del Pro64
- Front ends
- Analizador y optimizador
- interprocedural
- Optimizador y paralelizador
- de bucles
- Optimizador global
- Generador de código
Back end
5Flujo de datos entre componentes
6Front ends
- C basado en gcc
- C basado en g
- Fortran90/95 de MIPSpro
7WHIRL
- 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.
IR alto nivel IR bajo nivel
construcciones del lenguaje muchas pocas
longitud secuencias de código cortas largas
estructura jerárquica plana
8IPA Anl. opt. interprocedural
- Dos etapas
- Local Recopilar información de cada archivo.
- Principal Análisis y optimización considerando
todo el conjunto de archivos.
9IPA Modelo de compilación
10IPA Etapa principal
- Compuesta por dos fases
- Análisis
- Optimización
- inlining
- cloning
- dead function and variable elimination
- constant propagation
11LNO Optimizador/paralelizador de bucles
- Análisis de dependencias a nivel de bucle.
- Transformaciones a nivel de bucle para un sólo
procesador. - OpenMP
- Paralelización automática
12LNO Transformaciones a nivel de bucle
- Loop Fission
- Loop Fusion
- Unroll and Jam
- Loop Interchange
- Loop Peeling
- Loop Tiling
- Data prefetching
13WHIRL2c,f
- Permite observar las transformaciones realizadas.
- No siempre es posible compilar el código
generado.
14WOPT Optimizador global
- Optimizaciones globales tradicionales
- Dead code elimination
- Partial redundancy elimination
- Strength reduction
- Induction variable elimination
- Register variable identification
- ...
15WOPT 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.
16CG Generador de código
17Esquema
- Características compilador
- Organización y componentes
- WHIRL y tabla de símbolos
- Organización directorios
- Ejecución Pro64
- Referencias
18WHIRL niveles
19WHIRL niveles
20WHIRL 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)
21WHIRL Ejemplo
VH WHIRL
while( i lt 5 ) sum i i
sum
i
4
i
sum
i
i
1
22Tabla 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
23Tabla 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
24Tabla de símbolos Ejemplo
main (2)
global (1)
ST_TAB ST_TAB
main PU_IDX
PU_TAB PU_TAB
visibilidad2 TY_IDX
ST_TAB ST_TAB
sum TY_IDX
i TY_IDX
TY_TAB TY_TAB
I4 TYLIST_ IDX
kind_ func TYLIST_ IDX
TYLIST_ TAB
TY_IDX
0
25Esquema
- Características compilador
- Organización y componentes
- WHIRL y tabla de símbolos
- Organización directorios
- Ejecución Pro64
- Referencias
26Organización directorios
27Organización de directorios(back-end)
28Ejecució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.
29Ejecución comandos básicos
- nue entrar en Native User Environment.
- bski -forceuser ejecutar simulador IA-64
(también ski/xski).
- sgicc/sgiCC/sgif90 ejecutar compilador Pro64.
- whirl2c/whirl2f generar archivos c o Fortran a
partir de la representación intermedia. - ir_b2a traducir representación intermedia a
formato ASCII.
30Ejecución SPEC2000
- Compilación -O2
- Entrada test
168.wupwise 034649
171.swim 001904
172.mgrid 060309
173.applu 000744
177.mesa 010133
178.galgel 010717
179.art 003826
183.equake 002200
187.facerec 005314
188.ammp
189.lucas 014456
191.fma3d 000006
200.sixtrack 030640
301.apsi 020957
164.gzip 002819
175.vpr 003959
176.gcc 000955
181.mcf 000112
186.crafty 010140
197.parser 003536
252.eon 001928
254.gap 001322
253.perlbmk
255.vortex 020730
256.bzip2 005517
300.twolf 001641
31Tamaño del código
- Un orden de magnitud respecto a SimpleScalar
Pro641 SimpleScalar Pro642 gcc 3.0
líneas 2.313.324 192.325 3.362.287 2.538.163
archivos 2.467 129 8.218 9.848
Pro641 sólo common, front-ends, ipa, be e
ir_tools. SimpleScalar fuentes del simulador sin
directorios test. Pro642 fuentes completas,
excepto linker gcc 3.0 fuentes completas
32Referencias
- WHIRL Intermediate Language Specification
- WHIRL Symbol Table Specification
- Tutorial on the SGI Pro64 compiler
infrastructure. Gao, Amaral, Dehnert, Towle - Pro64 Performance Compilers for IA-64. Dehnert
- Lista de distribución Pro64 http//sourceforge.ne
t/projects/open64 - Introducción al Compilador Pro64