Geheugenhiërarchie en prestaties

Waarom wordt een bewerking die alleen de x-coördinaten optelt vaak sneller wanneer een array van structuren wordt omgeschreven tot een structuur van arrays (elke component in een eigen array)?

struct P { float x, y, z, mass; };
struct P p[N];
for (i = 0; i < N; i++)
    sx += p[i].x;
  1. AOmdat de compiler bij een array van structuren geen instructie kan genereren die alleen x leest
  2. BOmdat de floating-point berekening met aparte arrays met hogere nauwkeurigheid wordt uitgevoerd
  3. COmdat de x-waarden aaneengesloten liggen en de ingelezen regel geen onnodige componenten bevat
Antwoord en toelichting tonen

Antwoord: C. Omdat de x-waarden aaneengesloten liggen en de ingelezen regel geen onnodige componenten bevat

Bij een array van structuren (AoS) staan x, y, z en massa als groepen van 16 byte naast elkaar, zodat bij een bewerking die alleen x leest drie kwart van een regel van 64 byte uit ongebruikte data bestaat. Als elke component in een eigen array staat (SoA), liggen de x-waarden aaneengesloten, wordt de ingelezen regel volledig benut en daalt het geheugenverkeer tot ongeveer een vierde. Ook vectorisatie met SIMD wordt eenvoudiger. Ook bij AoS kan een instructie die x leest worden gegenereerd, en de rekennauwkeurigheid verandert niet door de arrayvorm.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Geheugenhiërarchie en prestaties

  1. Wat is het belangrijkste voordeel van een gesplitste L1-cache met aparte caches voor instructies (I-cache) en data (D-cache)?
  2. In een systeem met paginagrootte 4 KB en regelgrootte 64 byte wordt een L1-cache met virtuele index en fysieke tag (VIPT) zo opgebouwd dat index en offset alleen uit bits binnen de pagina bestaan. Wat is de maximale capaciteit van de cache bij 8-weg set-associativiteit?
  3. Wat is de belangrijkste reden dat VIPT (virtuele index, fysieke tag) vaak wordt gebruikt voor de L1-cache?
  4. De hittijd van de cache is 2 cycli, de missratio 4% en de misstraf 150 cycli. Hoeveel cycli bedraagt de gemiddelde geheugentoegangstijd?
  5. Een processor heeft bij een ideale cache een gemiddelde CPI van 1,0, gemiddeld 1,3 geheugentoegangen per instructie, een missratio van 2% en een misstraf van 100 cycli. Wat is de werkelijke gemiddelde CPI?

Vergelijkingen bij dit onderwerp