Pregunta

Tengo que mejorar el rendimiento del sistema.

El ciclo habitual de optimización se ha hecho y ya hemos logrado 1.5X un mejor rendimiento.

Ahora estoy empezando a preguntar si puedo utilizar la salida Cachegrind para mejorar el rendimiento del sistema.

Puede alguien que me señale cómo empezar en esto?

Lo que entiendo es que tenemos que garantizar con mayor frecuencia datos utilizados deben mantenerse lo suficientemente pequeño como para que permanezca en la memoria caché L1 y el siguiente conjunto de datos debe caber en la L2.

¿Es esta la dirección correcta que estoy tomando?

¿Fue útil?

Solución

El `s cierto que la salida Cachegrind en sí mismo no da demasiada información de cómo ir sobre la optimización de código. Uno tiene que saber cómo interpretar y lo que está diciendo acerca de que encajan en L1 y L2 de datos es de hecho la dirección correcta.

Para entender completamente cómo los patrones de acceso a memoria influyen en el rendimiento, recomiendo la lectura de un excelente documento "Lo que todo programador debe saber acerca de la memoria " de Ulrich Drepper, el mantenedor libc de GNU.

Otros consejos

Si tiene problemas para analizar la salida Cachegrind, mira en kcachegrind (que debe estar disponible en su distribución de elección). Yo lo uso y lo encuentro muy útil.

De acuerdo con la documentación Cachegrind , los detalles dados a usted por Cachegrind son el número de fallos de caché para una determinada parte de su código. Lo que necesita saber acerca de cómo funcionan las memorias caché en la arquitectura está destinada a una audiencia para que sepa cómo solucionar el código. En la práctica esto significa hacer más pequeña de datos o cambiar el patrón de acceso de algunos datos para que los datos en caché se encuentra todavía en la memoria caché. Sin embargo es necesario entender los datos de su programa y acceso a los datos antes de poder actuar sobre la información. Como se dice en el manual,

  

En resumen, Cachegrind que puedo decir que algunos de los cuellos de botella en el código son, pero no se puede decir cómo solucionarlos. Hay que trabajar eso por ti mismo. Pero al menos que tenga la información!

1,5x es una buena aceleración. Significa que has encontrado algo que tuvo un 33% de las veces que usted podría deshacerse de él. Apuesto a que usted puede hacer más, incluso antes de llegar a los problemas de bajo nivel como memoria caché de datos. Este es un ejemplo de cómo. Básicamente, usted podría tener problemas de rendimiento adicionales (y las oportunidades de aumento de velocidad) que no eran grandes antes, al igual que el 25% dicen. Pues bien, con el aumento de velocidad de 1,5x, que el 25% es ahora del 37,5%, por lo que es "vale más" de lo que era. A menudo, un problema es en la forma de alguna llamada a la función de la pila intermedia que está solicitando un trabajo que, una vez que sepa cuánto cuesta, puede decidir no es completamente necesario. Desde kcachegrind en realidad no identificar estos, no puede darse cuenta de que es un problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top