Articulo de referencia

Superoptimización

La superoptimización es el proceso mediante el cual un compilador encuentra automáticamente la secuencia óptima de instrucciones sin bucles. Los compiladores del mundo real gene...

La superoptimización es el proceso mediante el cual un compilador encuentra automáticamente la secuencia óptima de instrucciones sin bucles. Los compiladores del mundo real generalmente no pueden producir código verdaderamente óptimo , y si bien la mayoría de las optimizaciones estándar solo mejoran el código parcialmente, el objetivo de un superoptimizador es encontrar la secuencia óptima, la forma canónica . Los superoptimizadores pueden usarse para mejorar los optimizadores convencionales al resaltar las oportunidades perdidas para que un humano pueda escribir reglas adicionales.

Historia

El término superoptimización fue acuñado por Alexia Massalin en el artículo de 1987 «Superoptimizer: A Look at the Smallest Program» [ 1 ] . La etiqueta «optimización de programas» se ha aplicado a un campo que no aspira a optimizar, sino solo a mejorar. Esta denominación errónea obligó a Massalin a llamar a su sistema superoptimizador, que en realidad es un optimizador para encontrar un programa óptimo [ 2 ] .

En 1992, se desarrolló el Superoptimizador GNU (GSO) para integrarse en la Colección de Compiladores GNU (GCC). [ 3 ] [ 4 ] Posteriormente, se desarrollaron y ampliaron estas ideas.

Técnicas

Tradicionalmente, la superoptimización se realiza mediante una búsqueda exhaustiva por fuerza bruta en el espacio de secuencias de instrucciones válidas. Este método es costoso y, en gran medida, poco práctico para compiladores de propósito general. Sin embargo, se ha demostrado su utilidad para optimizar bucles internos críticos para el rendimiento. También es posible utilizar un solucionador SMT para abordar el problema, lo que mejora enormemente la eficiencia de la búsqueda (aunque las entradas más complejas que un bloque básico siguen estando fuera de su alcance). [ 5 ]

En 2001, Compaq Research demostró la superoptimización dirigida por objetivos en el proyecto Denali. [ 6 ] En 2006, se aplicó la programación declarativa de conjuntos de respuestas a la superoptimización en el proyecto TOAST ( Total Optimisation using Answer Set Technology ) [ 7 ] en la Universidad de Bath . [ 8 ] [ 9 ]

La superoptimización puede utilizarse para generar automáticamente optimizadores de mirilla de propósito general . [ 10 ]

Superoptimizadores disponibles públicamente

Existen varios superoptimizadores disponibles para su descarga gratuita.

Véase también

Referencias

  1. Massalin, Henry (1987). "Superoptimizer: A look at the smallest program" (PDF) . ACM SIGARCH Computer Architecture News . 15 (5): 122– 126. doi : 10.1145/36177.36194 . Recuperado el 1 de mayo de 2023. Dado un conjunto de instrucciones, el superoptimizador encuentra el programa más corto para calcular una función. Se han generado programas sorprendentes, muchos de ellos involucrados en intrincadas manipulaciones de bits que guardan poca semejanza con los programas fuente que definieron las funciones. La idea clave en el superoptimizador es una prueba probabilística que hace que las búsquedas exhaustivas sean prácticas para programas de tamaño útil.
  2. Joshi, Rajeev; Nelson, Greg; Randall, Keith (2002). "Denali: Un superoptimizador dirigido por objetivos" . ACM SIGPLAN Notices . 37 (5): 304– 314. doi : 10.1145/543552.512566 .
  3. 1 2 Granlund, Torbjörn; Kenner, Richard (1992). "Eliminación de ramas mediante un superoptimizador y el compilador GNU C". Actas de la conferencia ACM SIGPLAN 1992 sobre diseño e implementación de lenguajes de programación - PLDI '92 . CiteSeerX 10.1.1.58.3509 . doi : 10.1145/143095.14314 (inactivo 2025-09-07). ISBN  978-0-89791475-8. S2CID 8825539 . {{cite book}}: CS1 maint: DOI inactivo desde septiembre de 2025 ( enlace )
  4. 1 2 "Índice de /gnu/superopt" . Sistema Operativo GNU . Free Software Foundation, Inc. 14 de junio de 1995. Consultado el 1 de mayo de 2023 .
  5. 1 2 Jangda, Abhinav; Yorsh, Greta (25-10-2017). Superoptimización sin límites . Onward!'17, 25-27 de octubre de 2017, Vancouver, Canadá. pp. 78-88 . doi : 10.1145/3133850.3133856 . 
  6. Joshi, Rajeev; Nelson, Greg; Randall, Keith (30 de julio de 2001). "Denali: un superoptimizador orientado a objetivos" . Compaq Systems Research Center. HP Labs . Hewlett-Packard Co. Recuperado el 1 de mayo de 2023 .
  7. "TOAST – KRRwiki" . Departamento de Ciencias de la Computación, Grupo de Fundamentos Matemáticos. Grupo de Representación del Conocimiento y Razonamiento (KRR) . Universidad de Bath . 7 de agosto de 2007. Archivado del original el 28 de noviembre de 2012. Consultado el 3 de septiembre de 2016 .
  8. Brain, Martin; Crick, Tom; De Vos, Marina; Fitch, John (17 de agosto de 2006). "TOAST: Aplicación de la programación de conjuntos de respuestas a la superoptimización". En Etalle, Sandro; Truszczyński, Mirosław (eds.). Programación lógica . Lecture Notes in Computer Science. Vol. 4079. Springer-Verlag . pp. 270–284 . doi : 10.1007/11799573_21 . ISBN   978-3-540-36636-2.
  9. Crick, Tom (2009). Superoptimización: Generación de código demostrablemente óptimo mediante programación de conjuntos de respuestas (tesis doctoral). Universidad de Bath . Recuperado el 15 de noviembre de 2024 .
  10. Bansal, Sorav; Aiken, Alex (2006). "Generación automática de superoptimizadores de mirilla" (PDF) . Recuperado el 1 de mayo de 2023 .
  11. "Superoptimizador GNU" .
  12. StanfordPL. "STOKE" . GitHub .
  13. Bansal, Sorav; Aiken, Alex (2008). "Traducción binaria usando superoptimizadores de mirilla" (PDF) . Recuperado el 1 de mayo de 2023 .
  14. Serpell, Daniel (2003). "SuperOptimizador para microcontroladores PIC de Microchip" . Google Sites . Archivado del original el 11 de octubre de 2016. Consultado el 6 de septiembre de 2016 .
  15. Serpell, Daniel (21-06-2003). "PIC Microcontroller SuperOptimizer" . Freecode . Slashdot Media. Archivado del original el 17-09-2016 . Recuperado el 06-09-2016 .
  16. "Un estudio de viabilidad de Embecosm" .
  17. Superoptimización – Código fuente de Embecosm
  18. Hume, Tom (21 de agosto de 2012). "Programa Clojure para buscar exhaustivamente programas Java óptimos" . GitHub . Archivado del original el 10 de junio de 2018. Recuperado el 6 de septiembre de 2016 .
  19. Sasnauskas, Raimondas; Chen, Yang; Collingbourne, Peter; Ketema, Jeroen; Lup, Gratian; Taneja, Jubi; Regehr, John (2017). "Souper: Un superoptimizador sintetizador". arXiv : 1711.04422 [ cs.PL ].Código fuente de GitHub
  20. Cabrera Arteaga, Javier; Donde, Shrinish; Gu, Jian; Floros, Orestis; Satabin, Lucas; Baudry, Benoit; Monperrus, Martin (23 de marzo de 2020). Superoptimización del código de bytes de WebAssembly . MoreVMs: Taller sobre entornos de ejecución de lenguajes modernos, ecosistemas y máquinas virtuales. pp. 36–40 . arXiv : 2002.10213 . doi : 10.1145/3397537.3397567 . Código fuente de GitHub