Hotspot ( eng. hotspot [1] ) - una sección de código en el programa , que representa la mayoría de las instrucciones ejecutables del procesador [2] o para cuya ejecución el procesador pasa mucho tiempo [3] (algunos las instrucciones se ejecutan más rápido, mientras que otras son más lentas). Los puntos de acceso pueden ser cuellos de botella del programa si tienen una carga adicional debido a la ineficiencia del código, en cuyo caso se pueden optimizar [3] .
Las secciones de código innecesariamente intensivas en recursos ( "cuellos de botella" del programa) pueden ser el resultado de elegir un algoritmo más lento para resolver el problema, una arquitectura de aplicación no pensada completamente, características de operación del microprocesador , esperar operaciones de E / S , etc.
Un ejemplo de una pieza de código que consume muchos recursos debido a un error en la arquitectura de la aplicación es el uso de un spinlock en el primer subproceso para obtener el resultado del segundo subproceso, que se dedica a los cálculos, siempre que se haya asignado el primer subproceso. la prioridad más alta posible (interacción del usuario), y la segunda, la más baja (cómputo de fondo). Porque spinlock es un bucle de sondeo infinito para el valor de la variable , y la prioridad del proceso es alta, entonces el planificador asignará la mayor parte del tiempo para la ejecución del primer proceso, y el segundo proceso se le asignará mucho menos tiempo de procesador . Como resultado, se desperdiciará la mayor parte del tiempo del procesador. La solución al problema en este caso sería usar un semáforo de bloqueo en lugar de un spinlock, o cambiar las prioridades de los hilos.
La identificación y el análisis de los " puntos calientes " del programa pueden indicar direcciones para su mayor optimización [2] .
El análisis profundo se puede realizar por separado para diferentes arquitecturas de procesador y puede incluir análisis de la carga en diferentes niveles de caché del procesador , análisis de patrones de acceso a la memoria, estudio del contador de utilización del ciclo del procesador, etc. [2]
Para identificar áreas intensivas en recursos en el programa, se utilizan programas especiales, llamados perfiladores (perfiladores).
Los generadores de perfiles más famosos de la familia de sistemas operativos Unix son gprof y Callgrind . En Linux , OProfile y perf también están disponibles . Muchos IDE avanzados tienen generadores de perfiles integrados, como Microsoft Visual Studio , NetBeans, etc.
Existen dos métodos principales de creación de perfiles: a través del análisis del tiempo de ejecución del código (Callgrind) y a través de los contadores de rendimiento del procesador (OProfile). El primer método le permite encontrar código que tarda mucho tiempo en ejecutarse (por ejemplo, un bloqueo de semáforo a largo plazo). El segundo método le permite encontrar secciones de código que cargan el procesador más que otras (por ejemplo, cálculos que consumen muchos recursos). Con ambos métodos, puede analizar secciones de código para comprender las razones por las que tardan demasiado en ejecutarse. Si una función tarda mucho tiempo en ejecutarse, pero de acuerdo con los contadores de rendimiento del procesador, casi no carga el procesador, es posible que tenga un bloque largo o una llamada del sistema larga al kernel del sistema operativo.