sirve que poo polimorfismo para inteligencia herencia artificial haskell profiling polymorphism ghc

haskell - que - ¿Perfilando el costo del polimorfismo?



polimorfismo c++ (1)

Tengo una base de código que es "innecesariamente" polimórfica en el sentido de que casi todas las funciones son polimórficas de alguna manera (¿por qué no, cuando puedes?), Pero el programa final usa funciones con solo un puñado de tipos concretos. Empecé a pasar un tiempo lanzando los INLINABLE SPECIALIZE e INLINABLE para intentar reducir el costo de rendimiento de todo este polimorfismo, pero con el tamaño de mi código es bastante impredecible. ¿Hay alguna forma de saber a partir del perfil cuánto tiempo se gasta "haciendo las cosas que necesita el polimorfismo" en el tiempo de ejecución, para cada función?

(Nota: He hecho esta pregunta sin saber si tal cosa es técnicamente posible o si "las cosas que necesita el polimorfismo" están lo suficientemente definidas).


El proceso de determinación de costos es:

  • Construya un punto de referencia - con criterio, o alguna otra herramienta de medición
  • Perfil - con soporte de perfiles de ghc
  • Lea el núcleo - con ghc-core, si las causas de rendimiento no son obvias

Normalmente identificarás alguna operación que sea demasiado lenta; compile con perfiles y determine con precisión qué componentes son costosos, y luego inspeccione el código para optimizarlo (por ejemplo, especializando estructuras o funciones de datos, cambiando algoritmos o realizando otros cambios).

Para el trabajo de rendimiento crítico, luego irá e inspeccionará el Núcleo para ver si el microajuste del compilador puede ayudar.