Cela fait partie de la sortie de cachegrind. Cette partie du code a été exécutée 1224 fois. elmg1 est un tableau de longueur non signée de 16 x 20. La taille de ma mémoire cache de la machine L1 est de 32 Ko, la taille de la ligne de cache de 64 Mo et l'ensemble associatif à 8 voies.Interprétation de la sortie de cachegrind
- for (i = 0; i < 20; i ++) 78336 2448 50184 2 0 0 0 0 1224
- {
- telm01 = elmg1 [i]; 146,880 0 0 73,440 0 0 24,480 0 0
- telm31 = (telm01 < < 3)^val1; 97,920 0 0 48,960 0 0 24,480 0 0
- telm21 = (telm01 < < 2)^(val1 >> 1); 146,880 1,224 1 48,960 0 0 24,480 0 0
- telm11 = (telm01 < < 1)^(val1 >> 2); 146.880 0 0 48.960 0 0 24.480 0 0
- }
A. La raison pour laquelle je l'ai mis ici, est que, dans la 3ème ligne à l'intérieur de la boucle, je vois un certain nombre de I1 manque (une L2 manque aussi bien). C'est un peu confus et je ne pouvais pas deviner la raison pour laquelle?
B. J'essaie d'optimiser (temps) une partie du code. Ce qui précède est juste un petit extrait. Je pense que dans mon programme d'accès à la mémoire m'a coûté beaucoup. Comme dans l'exemple ci-dessus, elmg1 est un tableau de taille 16 x 20 de longs non signés. Quand j'essaie de l'utiliser dans le code, il y a toujours des échecs, et dans mon programme ces variables se produisent beaucoup. Aucune suggestion?
C. Je dois allouer et (parfois initialiser) ces longs non signés. Pouvez-vous suggérer lequel devrais-je préférer, déclaration de calloc ou de tableau et puis initialisation explicite. Par ailleurs, y aura-t-il une différence dans la façon dont le cache les gère?
Merci.
A. C'est ok, mais pourquoi il y a des échecs de cache à la ligne 5, alors qu'il y en a moins à la ligne 3, 4. Dois-je spécifier la chose d'alignement moi-même? . – anup
Oui, malloc devrait fournir au moins 8 octets d'alignement, mais ce n'est pas la même chose que l'alignement du cache de 64 octets. L'alignement du cache est important uniquement lorsque vous disposez d'un tableau d'objets de 64 octets chacun. Si le cache n'est pas aligné, l'accès à un élément du tableau peut provoquer deux échecs de cache au lieu d'un. Mais l'alignement du cache n'est pas un problème dans ce cas. – Neopallium
Merci pour votre réponse. Mais, une chose que je n'ai pas compris ce que cela a à voir avec 3 lignes de cache? Il devrait y avoir plus de lignes de cache. – anup