22

J.M. Siskind's research statement estados:¿Otras referencias a cómo el compilador de Stalin optimiza brutalmente?

Stalin es un compilador de optimización para el esquema que lleva a cabo el análisis estático de todo el programa y utiliza los resultados de ese análisis para generar código extremadamente eficiente. Stalin utiliza una gran colección de técnicas de análisis estático. Realiza una nueva forma de análisis de flujo polivalente que utiliza análisis de flujo monovariante iterado para realizar la división dirigida al flujo: clonación de copias especializadas de procedimientos y asignación de objetivos por cada sitio de llamada a dichos clones. Utiliza los resultados del análisis de flujo para realizar análisis de vida útil, análisis de escape, análisis de puntos y análisis de alias obligatorios. Estos análisis respaldan una nueva forma de conversión de cierre liviano que elimina la mayoría de las ranuras de cierre, utilizando técnicas tales como la globalización y localización variables, comprime la cadena trasera estática y generalmente elimina la mayoría de los cierres de los programas. También utiliza los análisis anteriores para admitir la administración de almacenamiento basada en la región dirigida al flujo, donde la recolección de basura en tiempo de ejecución se reemplaza por una asignación y desasignación estáticas en base al valor por valor abstracto y por punto de programa. También realiza conversión CPS liviana dirigida al flujo, utilizando extensiones de las técnicas iniciadas con Screamer, para soportar continuaciones de primera clase extremadamente eficientes. Finalmente, es compatible con la alineación dirigida por flujo y la selección de representación de bajo nivel para elegir la implementación (o no implementación) de las etiquetas, la comprobación de etiquetas y el despacho de etiquetas en base al valor por valor abstracto y por punto de programa. Esto elimina la mayoría de las etiquetas de tiempo de ejecución, verificación de etiquetas, etiquetado, eliminación de etiquetas, despacho de etiquetas, boxeo y desempaquetado de programas. Estos análisis y optimizaciones permiten a Stalin generar código extremadamente eficiente que supera a todos los demás compiladores Scheme por factores que varían entre dos y cien, particularmente para código numéricamente intensivo. Stalin a menudo genera código que supera el c manuscrito y el código Fortran.

que fue capaz de encontrar el siguiente documento muy interesante sobre los cierres de función/aplicación llama: Flow-Directed Lightweight Closure Conversion. También he enviado un correo electrónico al autor para preguntar acerca de los documentos sobre los otros temas, que se mencionan como escritos en el documento de conversión de cierre:

Siskind, J. M. 2000a. Conversión CPS ligera dirigida al flujo. En la preparación de.

Siskind, J. M. 2000b. Poliavarianza dirigida al flujo. En la preparación de.

Siskind, J. M. 2000c. Selección de representación dirigida al flujo. En la preparación de.

Siskind, J. M. 2000d. Gestión de almacenamiento dirigida al flujo. En preparación

Lamentablemente, nunca llegó a escribir esos documentos. Mi pregunta para usted es: ¿hay alguna alternativa o documentos relacionados que cubran estos temas? Estoy muy interesado en aprender cómo Stalin (u otros compiladores) pueden compilar un lenguaje de alto nivel como Scheme que es basura recolectada, tipeada dinámicamente, compatible con funciones de primera clase e incluso continuaciones de primera clase, puede ser compilada estáticamente a tal código eficiente .

+10

Me pregunto, ¿por qué los votos cercanos aquí? –

+0

Tal vez algunas personas piensan que es una broma por el título? Lo más probable es que piensen que es demasiado teórico. Estoy en desacuerdo. –

+0

Probablemente porque la pregunta es más adecuada para el intercambio de pila cstheory. – erjiang

Respuesta

4

R. Kent Dybvig's publications list.

Editar: Una buena introducción a Chez Esquema es su ICFP presentation y la paper that went along with that. Algunos de los documentos se relacionan específicamente con el Esquema (macros, valores múltiples, continuación) y algunos son más ampliamente aplicables (Register Allocation Using Lazy Saves, Eager Restores, and Greedy Shuffling).

+1

¿Algo en particular que se aplique a la optimización de los compiladores Scheme? – spacemanaki

+0

¿Miraste la lista? – erjiang

+2

Sí, lo hice, y algunos títulos obviamente no están relacionados con la optimización de compiladores, mientras que otros pueden ser, pero no estoy seguro de dónde es un buen lugar para comenzar. No estaba tratando de ser sarcástico, era genuinamente curioso. ¿Hay un solo documento que pienses que sería un buen comienzo? – spacemanaki

Cuestiones relacionadas