[Comprensión profunda de los sistemas informáticos] Capítulo 5: Optimización del rendimiento del programa

A partir de este capítulo, el siguiente paso es el almacenamiento y las redes. Primero resuelve las principales contradicciones. Solo grabar parte.

 

  1. [Uso de alias de memoria] Cuando el parámetro entrante se considera como un puntero, el compilador no puede optimizarlo directamente. El ejemplo dado se muestra a continuación. De hecho, para escribir una función similar a memcpy, cuando pasa dos punteros para la copia de la matriz, también debe confirmar si la dirección apuntada por el puntero dst coincide con la matriz src. El compilador realiza la optimización, y el código está escrito por humanos, todo lo cual requiere una cuidadosa consideración.
  2. [Movimiento de código] Saque el cálculo repetido del bucle. Por ejemplo, for (int i = 0; i <vec_int.size (); ++ i). Por supuesto, no estamos seguros de si el compilador optimizará esto.
  3. [Predicción de sucursal y ejecución especulativa]
    • La ICU (Unidad de Control de Instrucción) es responsable de leer la secuencia de instrucciones de la instrucción que indica la memoria caché y genera operaciones. La Unidad de Retiro registra el procesamiento continuo y garantiza que respeta la semántica de secuencia de los programas a nivel de máquina.
    • UE (Unidad de ejecución, unidad de ejecución): realiza la operación generada por la UCI
  4. [Rendimiento de la operación aritmética Pentium III] El tiempo de ejecución y el tiempo de lanzamiento de la división de enteros (36) y la división de punto flotante (38) son conmovedores. El rendimiento de los diferentes procesadores es diferente, no lo noté cuando estaba estudiando.
  5. [Desarrollo de bucle] Optimización paralela. Tales como: multiplicar bits impares y multiplicar bits pares. Sin embargo, el grado de paralelismo está limitado por el número de registros.
  6. [Estrategia básica para optimizar el rendimiento del programa]
    • Diseño avanzado: seleccione el algoritmo y la estructura de datos adecuados.
    • Principios básicos de codificación:
      • Eliminar llamadas continuas a funciones. Cuando sea posible, mueva el cálculo fuera del ciclo.
      • Eliminar referencias innecesarias de memoria. Introducir variables temporales para guardar resultados intermedios. Después de calcular el valor final, almacene el resultado en una matriz o variable global.
    • Optimización de bajo nivel
      • Pruebe varias formas de punteros en relación con los códigos de matriz.
      • Despliegue de bucle
      • Segmentación iterativa
    • ¡Finalmente, la corrección es lo más importante!
  7. [Creación de perfiles] El sistema Unix proporciona un programa de creación de perfiles GPROF.
    • El momento no es muy preciso. Basado en una técnica de intervalo simple.
    • La información de la llamada es bastante confiable.
    • Por defecto, las llamadas a las funciones de la biblioteca no se muestran.

 

Supongo que te gusta

Origin www.cnblogs.com/zhouys96/p/12702569.html
Recomendado
Clasificación