En informática , la rematerialización (o remat) es una optimización del compilador que ahorra tiempo al recalcular un valor en lugar de cargarlo desde la memoria. Generalmente, está estrechamente integrada con la asignación de registros , donde se utiliza como alternativa al volcado de registros a la memoria. Fue concebida por Gregory Chaitin , Marc Auslander , Ashok Chandra , John Cocke , Martin Hopkins y Peter Markstein , e implementada en el compilador Pl.8 para el minicomputador 801 a finales de la década de 1970. Posteriormente, Preston Briggs , Keith D. Cooper y Linda Torczon realizaron mejoras en 1992.
Las optimizaciones tradicionales, como la eliminación de subexpresiones comunes y la elevación de invariantes de bucle, suelen centrarse en eliminar cálculos redundantes. Dado que el cálculo requiere ciclos de CPU , esto suele ser beneficioso, pero tiene el efecto secundario potencialmente devastador de que puede aumentar los rangos de vida de las variables y crear muchas variables nuevas, lo que provoca desbordamientos durante la asignación de registros. La rematerialización es prácticamente lo opuesto: disminuye la presión sobre los registros al aumentar la cantidad de cálculo de la CPU. Para evitar añadir más tiempo de cálculo del necesario, la rematerialización se realiza solo cuando el compilador tiene la certeza de que será beneficiosa , es decir, cuando de otro modo se produciría un desbordamiento de registro a memoria.
La rematerialización funciona registrando la expresión utilizada para calcular cada variable, mediante el concepto de expresiones disponibles . A veces, las variables utilizadas para calcular un valor se modifican y, por lo tanto, ya no se pueden usar para rematerializarlo. En ese caso, se dice que la expresión ya no está disponible. También deben cumplirse otros criterios, como una complejidad máxima en la expresión utilizada para rematerializar el valor; no tendría sentido rematerializar un valor mediante un cálculo complejo que consuma más tiempo que una carga. Por lo general, la expresión tampoco debe tener efectos secundarios .
Enlaces externos
- Chaitin, Gregory, Marc Auslander, Ashok Chandra, John Cocke, Martin Hopkins y Peter Markstein. "Asignación de registros mediante coloración", Computer Languages, vol. 6, n.º 1, 1981, págs. 47-57.
- P. Briggs, KD Cooper y L. Torczon. Rematerialización . Actas de la Conferencia SIGPLAN 92 sobre Diseño e Implementación de Lenguajes de Programación , SIGPLAN Notices 27(7), págs. 311-321. Julio de 1992.
- Mukta Punjabi. Rematerialización de registros en GCC . Analiza la implementación de la rematerialización en GCC .
- Optimizaciones del compilador