¿Qué hay de nuevo en las técnicas de optimización del compilador en los últimos años?


14

Estoy interesado en la optimización del flujo de datos y gráficos de flujo de control y, en particular, más complejo desde el punto de vista computacional. Pero también será interesante conocer los últimos inventos en el campo de las optimizaciones de mirillas.


2
En mi tesis ( diapositivas ) he discutido e implementado el aplanamiento del gráfico de llamadas en LLVM; Básicamente es una transformación interprocedural que elimina la noción de "función" porque fusiona todo el código, permitiendo un montón de posibilidades interesantes como el movimiento del código interprocedural, convenciones de llamadas optimizadas para callites, ejecución sin pila, etc.
CAFxX

@CAFxX: las diapositivas se bloquearon Open Office ... ¿tienes fotos en línea?
Yttrill


Gracias, pudimos ver con eso, aunque los gráficos estaban muy bien para ser visibles, el texto era bueno.
Hasta el

Respuestas:


8

No estoy seguro de cuán novedoso es, o si es demasiado aplicado para su interés, pero Hoopl muestra cómo una optimización de control / flujo de datos puede modularizarse, con la propagación de hechos sobre vértices de gráficos de control que son independientes del lenguaje y optimización específica.

Hacen referencia a un algoritmo de 2002 de Lerner, Grove y Chambers que compone optimizaciones simples en una "superoptimización".



6

Ha habido un poco de reactivación en los compiladores de optimización verificados. Además del artículo de Lerner (mencionado en un comentario anterior), puede consultar el proyecto CompCert dirigido por Xavier Leroy. Han hecho algunas cosas interesantes al especificar optimizaciones como pruebas verificables por máquina (usando Coq ). Todavía no he leído los documentos, pero el proyecto Verified Software Toolchain en Princeton también parece estar produciendo resultados interesantes en esta área.


1
También estamos trabajando en un proyecto similar a CompCert: CerCo ( cerco.cs.unibo.it ). A diferencia de CompCert, nuestro objetivo es producir un compilador de preservación de costos concreto verificado para un gran subconjunto de C (CompCert solo muestra que las propiedades extensionales del programa fuente se preservan mediante la compilación). También estamos implementando en el compilador algunas optimizaciones de bucle moderadamente complejas, así como optimizaciones "leves" como las que emplea CompCert, que por supuesto necesitarán ser verificadas para preservar los costos.
Dominic Mulligan el

5

Reconociendo que baz [i] + = force (foo [i], foo [j]) en un bucle FOR doble tiene resultados independientes para (i, j) y reordena las llamadas en una curva de relleno de espacio en (i, j) para reducir los errores de caché.

No es exactamente "mirilla", pero obtener un comportamiento ajeno a la memoria caché para "gratis" es bueno.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.