L'alignement sur la ligne de cache et de connaissance de la taille de ligne de cache

Pour éviter les faux partage, je veux aligner chaque élément d'un tableau à une ligne de cache. Alors d'abord j'ai besoin de savoir la taille d'une ligne de cache, j'ai donc attribuer à chaque élément de cette quantité d'octets. Deuxièmement, je veux que le début de la matrice être aligné sur une ligne de cache.

Je suis sous Linux et 8-core plate-forme x86. D'abord comment puis-je trouver la taille de ligne de cache. Deuxièmement, comment puis-je aligner sur une ligne de cache en C. je suis en utilisant le compilateur gcc.

Ainsi, la structure serait la suite par exemple, en supposant une taille de ligne de cache de 64.

element[0] occupies bytes 0-63
element[1] occupies bytes 64-127
element[2] occupies bytes 128-191

et ainsi de suite, en supposant bien-sûr que 0-63 est aligné sur une ligne de cache.

  • Peut-être cela peut vous aider: stackoverflow.com/questions/794632/...
  • Mais il ne montre pas à s'aligner dans une cache à l'aide de gcc.
  • Double Possible de par programmation obtenir la taille de ligne de cache?
  • Ce n'est pas une mauvaise idée d'utiliser une constante de compilation de 64 octets que le cache de la ligne de taille, de sorte que le compilateur ne peut cuire que dans les fonctions que les soins à ce sujet. Faire le compilateur génère du code pour l'exécution, la variable de taille de ligne de cache pourrais en manger quelques-uns des avantages de l'alignement des choses, surtout dans le cas de l'auto-vectorisation où il permet au compilateur de faire un code de meilleure qualité si elle connaît un pointeur est aligné sur une ligne de cache de la largeur (qui est plus large que le SIMD vecteur de largeur).