1ª Parte:
https://youtu.be/tuPsUMX1fr4
En esta 2ª parte analizamos cómo podemos medir los accesos a la caché utilizando cachegrind, y cómo optimizar nuestro código para mejorar los patrones de acceso. Empezamos revisando nuestro código del ejemplo 1 con respecto a su uso de la memoria caché.
Contenido detallado:
- Uso de cachegrind: entendiendo los datos que nos devuelve como resultado
- Entendiendo cómo funciona la caché a nivel básico y qué son fallos de caché (cache miss)
- Visualizando la velocidad relativa de los accesos a caché y entendiendo la importancia de optimizarlas (las ganancias pueden llegar a ser 200 a 1)
- Entendiendo los costes de accesos a memoria
- Entendiendo el layout de nuestros datos en memoria y los patrones de acceso asociados en función de cómo los estemos recorriendo
- Comparando distintos ejemplos de recorridos de datos en memoria, explicando y entendiendo su impacto en el rendimiento
- Entendiendo cómo se rellenan las líneas de la memoria caché a nivel básico: el procesador asume lectura lineal
- Entendiendo la importancia del tamaño de nuestros bloques de datos, independientemente del código, con respecto a su rendimiento en accesos a caché y memoria
- El bool maldito: cómo añadir un simple bool a una estructura, sin siquiera usarlo puede hacer más lenta la ejecución
- Entendiendo la importancia del tamaño de las líneas de la memoria caché y cómo afecta al rendimiento
- Costes reales medidos en accesos y caché misses de un simple bool mal puesto en una estructura de memoria: hasta el doble
- Importancia de entender, teorizar y hacer pruebas para ver si nuestras ideas se corresponden con el funcionamiento real del procesador
- El problema del tamaño de los datos y el desalineamiento respecto al tamaño de las líneas de caché
- Para profundizar, ir a buscar la información de primera mano: los manuales del procesador
- Observando unos resultados de conversión a ensamblador y ganancias por hacer bucles paralelizables: pipeline, ejecución especular, instrucciones MMX y SSE
- Problema de introducción de condiciones en bucles que destruyan el potencial paralelismo de las instrucciones
C++ : Optimizando accesos básicos a la memoria caché [V2][2018/19][Sesión 1.2] retro jordans | |
| 36 Likes | 36 Dislikes |
| 436 views views | 2.28K followers |
| Science & Technology Creative Commons Attribution licence (reuse allowed) | Upload TimePublished on 15 Feb 2019 |
No comments:
Post a Comment