Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. # Travail pratique 2 - Cours Microprocesseur
  2. ## Configuration du cache
  3. En exécutant la commande: `getconf -a | grep CACHE`, on obtient:
  4. ```
  5. LEVEL1_ICACHE_SIZE 32768
  6. LEVEL1_ICACHE_ASSOC 8
  7. LEVEL1_ICACHE_LINESIZE 64
  8. LEVEL1_DCACHE_SIZE 32768
  9. LEVEL1_DCACHE_ASSOC 8
  10. LEVEL1_DCACHE_LINESIZE 64
  11. LEVEL2_CACHE_SIZE 262144
  12. LEVEL2_CACHE_ASSOC 4
  13. LEVEL2_CACHE_LINESIZE 64
  14. LEVEL3_CACHE_SIZE 4194304
  15. LEVEL3_CACHE_ASSOC 16
  16. LEVEL3_CACHE_LINESIZE 64
  17. ```
  18. Cela nous donne la configuration pour les cache de niveau 1 (data et code), 2 et 3. Pour chacun, on obtient leur taille complète (SIZE), leur taille de bloc (LINESIZE) et le nombre de bloc se trouvant dans un Set (ASSOC).
  19. ## Optimisation (buffer simple)
  20. Afin de trouver les adresses, on execute le programme avec GDB, on met un breakpoint sur le main et on exécute. Ici, nous pouvons faire:
  21. ```
  22. (gdb) print &x[0][0]
  23. $1 = (int *) 0x7fffffe15540
  24. (gdb) print &x[0][1]
  25. $2 = (int *) 0x7fffffe15544
  26. (gdb) print &x[0][2]
  27. $3 = (int *) 0x7fffffe15548
  28. (gdb) print &x[1][0]
  29. $4 = (int *) 0x7fffffe156d0
  30. ```
  31. On voit clairement que les cellules [0][0] et [0][1] sont voisines avec un offset de 4 (c'est des integer). La cellule [1][0] se trouve 400 lignes plus loin (donc 100 cellules de différences) si l'on fait le calcul:
  32. ```
  33. Hex value:
  34. 7fffffe156d0 – 7fffffe15540 = 190
  35.  
  36. Decimal value:
  37. 140737486345936 – 140737486345536 = 400
  38. ```
  39. D'après la théorie vue en cours, il est préférable de parcourir le tableau dans l'ordre où les cellules sont stocké dans la RAM car on déplace les données par bloc de 64. Du coup, on change tout le temps les données avec la mauvaise façon.\
  40. Si l'on fait le calcul de performances (exécution du programme avec les deux méthodes), on obtient:
  41. ```
  42. Bad method
  43. Time 0.002857 seconds
  44. Good method
  45. Time 0.002001 seconds
  46. ```
  47.  
  48. Cette différence vient du problème de la data locality. Lorsque nous parcourons le tableau selon le deuxième index, celui-ci fait des sauts dans la mémoire pour atteindre les différents éléments, ce qui n'est pas très bon pour profiter du cache.
  49.  
  50. Cependant dans la bonne version, celui-ci parcours en premier le premier index et ensuite le deuxième. Il accède à des données qui sont à suivre dans la mémoire.
  51.  
  52. ## Optimisation (buffer complexe)
  53. Cette partie porte sur l'optimisation liées aux alignements dans la mémoire.\
  54. Par défaut, sur une machine x86, l'alignement est de 4.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement