Geheugenhiërarchie en prestaties
Wat is het belangrijkste doel van loop blocking (tiling), zoals gebruikt bij matrixvermenigvuldiging?
- ARekenen per klein blok dat in de cache past, zodat data vaker worden hergebruikt
- BHet aantal lusiteraties verminderen, zodat er aan het einde van de lus minder spronginstructies worden uitgevoerd
- CDe totale hoeveelheid gebruikt geheugen halveren zonder de rekenvolgorde te wijzigen
Antwoord en toelichting tonen
Antwoord: A. Rekenen per klein blok dat in de cache past, zodat data vaker worden hergebruikt
Bij rechtstreekse berekening van een groot matrixproduct worden ingelezen elementen uit de cache verdrongen voordat ze opnieuw worden gebruikt, zodat ze herhaaldelijk uit het hoofdgeheugen moeten worden ingelezen. Bij loop blocking wordt de matrix verdeeld in kleine blokken die in de cache passen en wordt de berekening binnen een blok afgerond; ingelezen data worden zo vaak hergebruikt en capaciteitsmisses nemen sterk af. Het verminderen van spronginstructies is het doel van loop unrolling, en de totale hoeveelheid gebruikt geheugen verandert niet.