Hiérarchie mémoire

Pourquoi le traitement ci-dessus, qui additionne uniquement les coordonnées x, devient-il généralement plus rapide une fois réécrit sous forme de structure de tableaux (chaque composante dans un tableau séparé) ?

struct P { float x, y, z, mass; };
struct P p[N];
for (i = 0; i < N; i++)
    sx += p[i].x;
  1. AAvec un tableau de structures, le compilateur ne peut pas générer d’instructions qui lisent uniquement x
  2. BAvec des tableaux séparés, les calculs en virgule flottante gagnent en précision
  3. CSeuls les x sont contigus, et les lignes chargées ne contiennent pas de composantes inutiles
Afficher la réponse et l'explication

Réponse : C. Seuls les x sont contigus, et les lignes chargées ne contiennent pas de composantes inutiles

Dans un tableau de structures (AoS), x, y, z et mass forment des groupes de 16 octets ; même un traitement qui ne lit que x laisse inutilisés les trois quarts de chaque ligne de 64 octets. Avec une structure de tableaux (SoA), seuls les x sont contigus : les lignes chargées sont entièrement utilisées et le trafic mémoire est divisé par environ 4. La vectorisation SIMD est également facilitée. Des instructions lisant x existent aussi en AoS, et changer la disposition du tableau ne modifie pas la précision des calculs.

S'entraîner sur ce thème Retour au thème

Autres questions sur Hiérarchie mémoire

  1. Quel est le principal avantage d’un cache L1 séparé en cache d’instructions (cache I) et cache de données (cache D) ?
  2. Dans un système à pages de 4 KB et lignes de 64 octets, le cache L1 est à index virtuel et étiquette physique (VIPT), et l’index et le déplacement doivent n’utiliser que des bits internes à la page. Avec une associativité à 8 voies, quelle est la capacité maximale du cache ?
  3. Pourquoi le schéma à index virtuel et étiquette physique (VIPT) est-il couramment utilisé pour les caches L1 ?
  4. Avec un temps de succès de 2 cycles, un taux de défauts de 4% et une pénalité de défaut de 150 cycles, quel est le temps moyen d’accès mémoire en cycles ?
  5. Un processeur a un CPI moyen de 1.0 avec un cache idéal. Il effectue en moyenne 1.3 accès mémoire par instruction, avec un taux de défauts de 2% et une pénalité de défaut de 100 cycles. Quel est le CPI moyen réel ?

Comparatifs sur ce thème