Hoe GPU-chips te ontwerpen
Chapter 4 Gpu Memory System Design

Hoofdstuk 4: Ontwerp van het GPU-geheugen systeem

Grafische Verwerkingseenheden (GPU's) zijn geëvolueerd tot zeer parallelle, programmeerbare versnellers die in staat zijn om hoge prestaties en energie-efficiëntie te bereiken op een breed scala aan toepassingen. Het geheugensysteem is een kritisch onderdeel van moderne GPU-architecturen, aangezien het de enorme hoeveelheid gelijktijdige threads moet voorzien van snelle toegang tot gegevens. In dit hoofdstuk zullen we de belangrijkste elementen van het ontwerp van het GPU-geheugensysteem verkennen, waaronder de eerste-niveau geheugenstructuren, het on-chip interconnectienetwerk, de geheugenpartitie-eenheden en onderzoeksrichtingen voor toekomstige GPU-geheugensystemen.

Eerste-Niveau Geheugenstructuren

De eerste-niveau geheugenstructuren in een GPU zijn verantwoordelijk voor het bieden van snelle toegang tot vaak gebruikte gegevens en het verminderen van het aantal toegangen tot de lagere niveaus van de geheuërarchie. Deze structuren omvatten meestal scratchpad-geheugen, L1 data-cache en L1 texture-cache.

Scratchpad-Geheugen en L1 Data-Cache

Scratchpad-geheugen, ook bekend als shared memory in het NVIDIA CUDA-programmeermodel of local memory in OpenCL, is een geheugenruimte met lage latentie die door software wordt beheerd en gedeeld wordt door alle threads binnen een cooperative thread array (CTA) of workgroup. Scratchpad-geheugen wordt meestal geïmplementeerd met behulp van een bankstructuur van SRAM om parallelle toegang door meerdere threads mogelijk te maken.

Figuur 4.1 illustreert een geïntegreerde L1 data-cache en scratchpad-geheugenorganisatie, vergelijkbaar met het ontwerp dat wordt gebruikt in NVIDIA's Fermi- en Kepler-architecturen [Minkin et al., 2012].

                                    Adres Kruisverbinding
                                          |
                                          v
                        Gegevensarray (Configureerbaar als Scratchpad of Cache)
                                          |
                                          v  
                                    Gegevens Kruisverbinding
                                          |
                                          v
                                 Laden/Opslaan Eenheid
```Figuur 4.1: Geünificeerde L1-datacache en krabbelgeheugenorganisatie.

De belangrijkste onderdelen van dit ontwerp zijn:

1. **Datamatrix**: Een zeer bankgeoriënteerde SRAM-structuur die kan worden geconfigureerd als ofwel krabbelgeheugen of L1-datacache. Elke bank is 32 bits breed en heeft zijn eigen decoder voor onafhankelijke toegang.

2. **Adrescrosbar**: Verdeelt geheugenaddressen van de load/store-eenheid naar de juiste banken in de datamatrix.

3. **Datacrosbar**: Stuurt gegevens van de banken naar de load/store-eenheid, die de gegevens vervolgens naar het registerbestand schrijft.

4. **Load/Store-eenheid**: Berekent geheugenaddressen, past samenvoegingsregels toe en breekt geheugenaccesses op in afzonderlijke samengevatte accesses.

Krabbelgeheugenaccesses omzeilen de tag-opzoekfase, aangezien het geheugen direct is toegewezen. Bankconflicten worden afgehandeld door de conflicterende accesses op te splitsen in meerdere cycli, waarbij de conflicterende delen in de daaropvolgende cycli worden herhaald.

De L1-datacache wordt gebruikt om een subset van de globale geheugenadresruimte op te slaan. Toegang tot de L1-datacache omvat een tag-opzoekactie om te bepalen of de aangevraagde gegevens aanwezig zijn. De cacheblokgrootte is meestal 128 bytes, die verder kunnen worden onderverdeeld in sectoren van 32 bytes om overeen te komen met de minimale gegevensgrootte die in één toegang kan worden gelezen uit grafische DRAM (bijv. GDDR5).

### L1-texturecache

Texturgeheugen is een alleen-lezen geheugenruimte die is geoptimaliseerd voor ruimtelijke lokaliteit en wordt vaak gebruikt in grafische werkbelastingen. De L1-texturecache is ontworpen om de 2D-ruimtelijke lokaliteit in textuurtoegang te benutten.

Figuur 4.2 toont een typische L1-texturecacheorganisatie.Hier is de Nederlandse vertaling van het Markdown-bestand, waarbij de code-opmerkingen zijn vertaald:

rray
                                  |
                                  v
                           Textuurfiltering
                                  |
                                  v
                           Gefilterde Texels

Figuur 4.2: Organisatie van de L1-textuurcache.

De belangrijkste onderdelen van de L1-textuurcache zijn:

  1. Adresomzetting: Zet textuurcoördinaten om in cacheadressen.

  2. Tag-array: Slaat de tags op voor elke cacheline om te bepalen of de gevraagde gegevens aanwezig zijn.

  3. Gegevensarray: Slaat de eigenlijke textuurgegevens op.

  4. Textuurfiltering: Voert interpolatie- en filteringsbewerkingen uit op de opgehaalde textuurgegevens om de uiteindelijke gefilterde texels te genereren.

De L1-textuurcache maakt meestal gebruik van een tegelbasisorganisatie om ruimtelijke lokaliteit te benutten. De cache is verdeeld in kleinere tegels (bijvoorbeeld 4x4 of 8x8 texels), en elke tegel wordt op een aaneengesloten manier opgeslagen om het aantal cachelines dat voor een bepaalde textuuropvraging wordt geopend, te minimaliseren.

Gecombineerde Textuur- en Datacache

Recente GPU-architecturen, zoals NVIDIA's Maxwell en Pascal, hebben een gecombineerde textuur- en datacache geïntroduceerd om de cachebenutting te verbeteren en de totale cachegrootte te verminderen [Heinrich et al., 2017]. In dit ontwerp worden de L1-datacache en de L1-textuurcache gecombineerd in één fysieke cache, met de mogelijkheid om de capaciteit dynamisch toe te wijzen tussen de twee op basis van de vereisten van de werkbelasting.

Figuur 4.3 illustreert de organisatie van een gecombineerde textuur- en datacache.

                                Geheugenaanvragen
                                       |
                                       v
                                  Cache-controller
                                 /             \
                                /               \
                               /                 \
                              v                   v
                      Datacache-partitie   Textuurcache-partitie
                              |Hier is de Nederlandse vertaling van het Markdown-bestand, waarbij de code-opmerkingen zijn vertaald:

Figuur 4.3: Geünificeerde textuur- en datacache-organisatie.

De belangrijkste onderdelen van het geünificeerde cache-ontwerp zijn:

  1. Cache-controller: Ontvangt geheugenaanvragen en bepaalt of deze moeten worden bediend door de datacache-partitie of de textuurcache-partitie.

  2. Datacache-partitie: Behandelt toegangen tot de globale geheugenruimte, vergelijkbaar met de zelfstandige L1-datacache.

  3. Textuurcache-partitie: Behandelt textuurgeheugenadressering, vergelijkbaar met de zelfstandige L1-textuurcache.

  4. Datamatrix: Een gedeelde datamatrix die zowel globale geheugengegevens als textuurgegevens opslaat.

Het geünificeerde cache-ontwerp maakt een betere benutting van de beschikbare cache-capaciteit mogelijk, aangezien de partitiegrootten kunnen worden aangepast op basis van de toegangspatronen van de werkbelasting. Deze flexibiliteit kan leiden tot verbeterde prestaties en energie-efficiëntie in vergelijking met vaste, gescheiden L1-caches.

On-chip interconnectienetwerk

Het on-chip interconnectienetwerk is verantwoordelijk voor het verbinden van de GPU-cores (ook wel streaming multiprocessors of rekenunits genoemd) met de geheugenpartitie-eenheden. Het interconnect moet een hoge bandbreedte en lage latentie bieden om de massieve parallellisme in GPU-werkbelastingen te ondersteunen.

Moderne GPU's gebruiken meestal een kruisverbinding of een maasstructuur voor het on-chip interconnect. Een kruisverbinding biedt volledige connectiviteit tussen alle cores en geheugenpartities, waardoor communicatie met hoge bandbreedte mogelijk is, maar tegen de prijs van een grotere oppervlakte en hoger energieverbruik. Een maasstructuur biedt daarentegen een meer schaalbare oplossing door elke core te verbinden met zijn naburige cores en geheugenpartities, waardoor een roosterachtige structuur ontstaat.

Figuur 4.4 toont een voorbeeld van een maasinterconnect in een GPU.

        Kern   Kern   Kern   Kern
         |      |      |      |
        ——     ——     ——     ——  
         |      |      |      |
        Kern   Kern   Kern   Kern
         |      |      |      |
        ——     ——     ——     ——
         |      |      |      |  
        Mem    Mem    Mem    Mem
        Part.  Part.  Part.  Part.

Figuur 4.4: Mesh-interconnect in een GPU.

De mesh-interconnect maakt efficiënte gegevensoverdracht mogelijk tussen kernen en geheugenpartities, waarbij de oppervlakte- en energieoverhead worden geminimaliseerd. Geavanceerde routeringsalgoritmen en flowcontrolemechanismen worden gebruikt om een hoge prestatie te garanderen en congestie te voorkomen.

Geheugenpartitie-eenheid

De geheugenpartitie-eenheid is verantwoordelijk voor het afhandelen van geheugenaanvragen van de GPU-kernen en het beheren van het off-chip DRAM. Elke geheugenpartitie bevat doorgaans een L2-cache, ondersteuning voor atomaire bewerkingen en een geheugenadresplanner.

L2-cache

De L2-cache is een gedeelde cache die zich bevindt tussen de GPU-kernen en het off-chip DRAM. Het primaire doel is het verminderen van het aantal toegangen tot het hooglatente, energieverslindende DRAM door frequent geraadpleegde gegevens in de cache op te slaan.

GPU L2-caches zijn meestal ontworpen als een set-associatieve, write-back cache met een grote capaciteit (bijv. 2-4 MB) en een hoge bandbreedte. De L2-cache is verdeeld over meerdere geheugenpartities om parallelle toegang mogelijk te maken en de doorvoer te verbeteren.

Figuur 4.5 illustreert de organisatie van een L2-cache in een GPU-geheugenpartitie.Hier is de Nederlandse vertaling van het Markdown-bestand, waarbij de code-opmerkingen zijn vertaald:

Figuur 4.5: Organisatie van de L2-cache in een GPU-geheugenpartitie.

De L2-cache-controller ontvangt geheugenverzoeken van de GPU-cores en controleert de tag-array om te bepalen of de gevraagde gegevens aanwezig zijn in de cache. Bij een cache-hit worden de gegevens uit de data-array opgehaald en teruggezonden naar de aanvragende core. Bij een cache-miss wordt het verzoek doorgestuurd naar de geheugenplanner, die vervolgens de gegevens ophaalt uit het DRAM.

### Atomaire Bewerkingen

Atomaire bewerkingen zijn essentieel voor synchronisatie en communicatie tussen threads in parallelle workloads. GPU's ondersteunen een verscheidenheid aan atomaire bewerkingen, zoals atomaire optelling, minimum, maximum en vergelijk-en-wissel, die de atomiciteit garanderen wanneer meerdere threads tegelijkertijd toegang hebben tot dezelfde geheugenlocatie.

Atomaire bewerkingen worden typisch geïmplementeerd in de geheugenpartitie-eenheden om een lage latentie en hoge doorvoer te garanderen. Speciale hardwarecomponenten, zoals atomaire bewerkingseenheden (AOUs), worden gebruikt om atomaire verzoeken efficiënt af te handelen.

Figuur 4.6 toont een voorbeeld van een atomaire bewerkingseenheid in een GPU-geheugenpartitie.

Atomaire Verzoeken | v Atomaire Bewerkingseenheid | v L2 Cache/DRAM

Figuur 4.6: Atomaire bewerkingseenheid in een GPU-geheugenpartitie.

De AOU ontvangt atomaire verzoeken van de GPU-cores en voert de gevraagde bewerking uit op de doelgeheugenlocatie. Als de geheugenlocatie aanwezig is in de L2-cache, werkt de AOU de cache-gegevens direct bij. Als de geheugenlocatie niet in de cache is, haalt de AOU de gegevens op uit het DRAM, voert de atomaire bewerking uit en schrijft het resultaat terug naar het DRAM.

### Geheugentoegangsprogrammeur

De geheugentoegangsprogrammeur is verantwoordelijk voor het beheren van de stroom van
```Hier is de Nederlandse vertaling van het bestand:

Geheugenaanvragen naar het off-chip DRAM. Het primaire doel is om de DRAM-bandbreedte-benutting te maximaliseren en tegelijkertijd de latentie van geheugenadressering te minimaliseren.

GPU-geheugenplanners gebruiken verschillende planningsalgoritmen en optimalisaties om een hoge prestatie te bereiken. Enkele veel voorkomende technieken zijn:

1. **Out-of-order scheduling**: Het herschikken van geheugenaanvragen om rij-bufferhits te maximaliseren en DRAM-voorladen en activeringsoverhead te minimaliseren.

2. **Bank-level parallelisme**: Het benutten van het parallelisme dat beschikbaar is over meerdere DRAM-banken om gelijktijdige toegang tot verschillende geheugenregio's mogelijk te maken.

3. **Write-to-read turnaround-optimalisatie**: Het minimaliseren van de latentiepenalty die wordt opgelopen bij het schakelen tussen schrijf- en leesoperaties in DRAM.

4. **Adresinterleaving**: Het verdelen van geheugenadressering over verschillende kanalen, rangen en banken om parallelisme te maximaliseren en contentie te vermijden.

Figuur 4.7 illustreert een hoog-niveau weergave van een geheugenadresseringsplanner in een GPU-geheugenpartitie.

Geheugenaanvragen | v Geheugenplanner | v Kanaal Kanaal Kanaal Kanaal | | | | v v v v Rang Rang Rang Rang | | | | v v v v
Bank Bank Bank Bank

Figuur 4.7: Geheugenadresseringsplanner in een GPU-geheugenpartitie.

De geheugenplanner ontvangt geheugenaanvragen van de L2-cache en de atomaire bewerkingseenheden, en besluit wanneer en in welke volgorde deze aanvragen naar het DRAM moeten worden verzonden. Door zorgvuldig geheugenadressering te plannen, kan de planner de DRAM-bandbreedte-benutting aanzienlijk verbeteren en de gemiddelde geheugenadresseringslatentie verlagen.

## OnderzoekRichtingen voor GPU-geheugenssystemen

Aangezien GPU-architecturen blijven evolueren en de eisen van parallelle werkbelastingen groeien, zijn er verschillende onderzoeksrichtingen gericht op het verbeteren van de prestaties en efficiëntie van GPU-geheugenssystemen. Enkele van de belangrijkste onderzoeksgebieden zijn:

### Geheugenadresplanning en ontwerp van interconnectienetwerk
Naarmate het aantal cores en geheugenpartities in GPU's blijft toenemen, wordt het ontwerp van de geheugenadresplanner en het interconnectienetwerk cruciaal voor het bereiken van hoge prestaties. Onderzoek op dit gebied richt zich op het ontwikkelen van nieuwe planningsalgoritmen en interconnecttopologieën die de massale parallellisme en complexe geheugenadrespatronen van GPU-werkbelastingen efficiënt kunnen verwerken.

Bijvoorbeeld, Jia et al. [2012] stellen een geheugenplanningsalgoritme voor genaamd "Staged Memory Scheduling" (SMS) dat gericht is op het verbeteren van DRAM-bankniveau-parallellisme en het verminderen van geheugenadrestijd. SMS verdeelt de geheugenadressenrij in twee fasen: batchvorming en batchplanning. In de batchvormingsfase worden aanvragen gegroepeerd in batches op basis van hun bank- en rijadres om rijlocatie te benutten. In de batchplanningsfase worden batches geprioriteerd op basis van hun leeftijd en kriticaliteit om eerlijkheid te garanderen en stagnatie te verminderen.

Een ander voorbeeld is het werk van Kim et al. [2012], waarin een high-bandwidth memory (HBM)-architectuur voor GPU's wordt voorgesteld. HBM stapelt meerdere DRAM-chips bovenop elkaar en verbindt ze met behulp van door-silicium-vias (TSV's), waardoor veel hogere bandbreedte en lagere latentie mogelijk zijn in vergelijking met traditionele GDDR-geheugens. De auteurs stellen ook een nieuw geheugencontrollerontwerp voor dat de toegenomen parallellisme en complexiteit van HBM efficiënt kan beheren.

### Effectiviteit van caching
GPU's gebruiken verschillende caching-mechanismen om het aantal off-chip geheugenadresseringen te verminderen en de prestaties te verbeteren. De effectiviteit van deze caches kan echter aanzienlijk variëren, afhankelijk van de kenmerken van de werkbelasting en het cacheontwerp.Onderzoek in dit gebied is gericht op het verbeteren van de effectiviteit van GPU-caches door middel van technieken zoals cache-omzeiling, cache-compressie en adaptief cache-beheer.

Bijvoorbeeld, Huangfu en Xie [2016] stellen een dynamisch cache-omzeilingsschema voor GPU's voor dat gebruik maakt van een eenvoudige maar effectieve heuristiek om te bepalen of een geheugenverzoek in de cache moet worden opgeslagen of moet worden omzeild op basis van de hergebruiksafstand. Het schema past zich aan het runtime-gedrag van de toepassing aan en kan de cache-vervuiling aanzienlijk verminderen en de prestaties verbeteren.

Een ander voorbeeld is het werk van Vijaykumar et al. [2015], waarin een gecomprimeerde cache-architectuur voor GPU's wordt voorgesteld. De auteurs observeren dat veel GPU-toepassingen aanzienlijke gegevensredundantie vertonen, die kan worden benut om de effectieve capaciteit van de caches te vergroten. Ze stellen een nieuw compressieschema voor dat hoge compressieverhoudingen kan bereiken met minimale latentie-overhead.

### Prioritering van geheugenverzoeken en cache-omzeiling
In GPU's kunnen geheugenverzoeken van verschillende warps en threads verschillende niveaus van kriticaliteit en impact op de algehele prestaties hebben. Het prioriteren van kritieke verzoeken en het omzeilen van niet-kritieke verzoeken kan helpen om de geheugenlatentie te verminderen en het resourcegebruik te verbeteren.

Onderzoek op dit gebied verkent technieken voor het identificeren en prioriteren van kritieke geheugenverzoeken, evenals mechanismen voor het selectief omzeilen van de caches.

Bijvoorbeeld, Jog et al. [2013] stellen een geheugenverzoekprioriteringsschema voor genaamd "Critical-Aware Warp Acceleration" (CAWA). CAWA identificeert kritieke warps die waarschijnlijk de pipeline zullen blokkeren en prioriteert hun geheugenverzoeken boven die van niet-kritieke warps. Het schema gebruikt een combinatie van statische en dynamische informatie, zoals het aantal afhankelijke instructies en de leeftijd van de warp, om de kriticaliteit te bepalen.

Lee et al. [2015] stellen een cache-omzeilingsschema voor GPU's voor dat gericht is op het verminderen van cache-vervuiling en het verbeteren van de tijdigheid van geheugentoegangen. Het schema gebruikt een op PC gebaseerde pHier is de Nederlandse vertaling van het bestand:

### Het benutten van inter-warp heterogeniteit
GPU's voeren een groot aantal warps gelijktijdig uit om geheugenlatentie te verbergen en een hoge doorvoer te bereiken. Verschillende warps kunnen echter aanzienlijke heterogeniteit vertonen in termen van hun resourcevereisten, geheugentoegangpatronen en prestatiekenmerken.

Onderzoek op dit gebied is erop gericht deze inter-warp heterogeniteit te benutten om de resourcetoewijzing, planning en geheugenbeheer in GPU's te verbeteren.

Bijvoorbeeld stellen Kayıran et al. [2014] een op warp-niveau gebaseerd divergentie-bewust cachebeheerschema voor dat dynamisch het cachegebruik en het vervangingsbeleid aanpast op basis van de divergentiekenmerken van elke warp. Warps met een hoge divergentie krijgen meer cacheresources toegewezen om geheugendivergentie te verminderen, terwijl warps met een lage divergentie minder resources krijgen toegewezen om de cachebenutting te verbeteren.

Een ander voorbeeld is het werk van Sethia et al. [2015], dat een ontwerp voor een geheugencontroller voorstelt dat inter-warp heterogeniteit benut om de DRAM bank-niveau parallellisme te verbeteren. De auteurs observeren dat verschillende warps verschillende graden van bank-niveau parallellisme kunnen hebben en stellen een op warps gebaseerd geheugenplanningsalgoritme voor dat warps met een hoge bank-niveau parallellisme prioriteit geeft om geheugencontentie te verminderen en de systeemprestaties te verbeteren.

### Gecoördineerd cache bypassing
Cache bypassing is een techniek waarmee geheugenverzoeken de cache kunnen overslaan en direct toegang krijgen tot de lager gelegen geheugenhiërarchie. Hoewel bypassing kan helpen om cachebezoedeling te verminderen en de tijdigheid van geheugentoegangen te verbeteren, kunnen niet-gecoördineerde bypassing-beslissingen over verschillende cores en geheugenpartities leiden tot suboptimale prestaties.

Onderzoek op dit gebied verkent technieken...Hier is de Nederlandse vertaling van het bestand, waarbij de code-opmerkingen zijn vertaald:

Gebruik voor het coördineren van beslissingen over het omzeilen van de cache over de GPU om de algehele systeemprestaties en hulpbronnenbenutting te verbeteren.

Bijvoorbeeld stellen Li et al. [2015] een gecoördineerd cache-omzeilingsschema voor GPU's voor dat gebruik maakt van een gecentraliseerde bypass-controller om globale omzeilingsbesluiten te nemen. De controller verzamelt runtime-informatie van elke kern, zoals cache-missratio's en geheugentoegangpatronen, en gebruikt deze informatie om de optimale omzeilingstrategie voor elke kern te bepalen. De auteurs laten zien dat hun schema de prestaties en energie-efficiëntie aanzienlijk kan verbeteren in vergelijking met niet-gecoördineerd omzeilen.

### Adaptief Cache-beheer
De optimale cache-configuratie voor een GPU-toepassing kan aanzienlijk variëren afhankelijk van de geheugentoegangpatronen, de werksetgrootte en de hulpbronvereisten. Statische cache-beheersbeleid die bij het ontwerp zijn vastgelegd, kunnen mogelijk niet kunnen aanpassen aan het diverse en dynamische gedrag van verschillende toepassingen.

Onderzoek op dit gebied verkent technieken voor het dynamisch aanpassen van de cache-configuratie en beheersbeleid op basis van het runtime-gedrag van de toepassing.

Bijvoorbeeld stellen Wang et al. [2016] een adaptief cache-beheerschema voor GPU's voor dat dynamisch de cache-partitiegrootten en vervangingsbeleid aanpast op basis van de geheugentoegangpatronen van de toepassing. Het schema gebruikt een combinatie van hardware- en softwaretechnieken om het cache-gedrag te bewaken en dynamische aanpassingen te maken om de cache-benutting en prestaties te verbeteren.

Een ander voorbeeld is het werk van Dai et al. [2018], dat een op machine learning gebaseerde aanpak voor adaptief cache-beheer in GPU's voorstelt. De auteurs gebruiken reinforcement learning om automatisch de optimale cache-configuratie voor elke toepassing te leren op basis van het runtime-gedrag. De geleerde beleidsregels worden vervolgens geïmplementeerd met behulp van een herconfigureerbare cache-architectuur die kan worden aangepast aan de specifieke behoeften van elke toepassing.

### Cache-prioritering
In GPU's hebben verschillende soortenHier is de Nederlandse vertaling van het bestand:

Geheugenaanvragen, zoals laden, opslaan en textuuraanvragen, kunnen verschillende latentie- en bandbreedte-eisen hebben. Het prioriteren van bepaalde typen aanvragen boven andere kan helpen om de algehele systeemprestaties en hulpbronnenbenutting te verbeteren.

Onderzoek op dit gebied verkent technieken voor het prioriteren van verschillende soorten geheugenaanvragen in de GPU-cachehi??rarchie.

Bijvoorbeeld stellen Zhao et al. [2018] een cacheprioriteringsschema voor GPU's voor dat verschillende prioriteiten toekent aan verschillende soorten geheugenaanvragen op basis van hun kriticaliteit en latentiegevoeligheid. Het schema gebruikt een combinatie van statische en dynamische informatie, zoals het instructietype en het aantal afhankelijke instructies, om de prioriteit van elke aanvraag te bepalen. De auteurs laten zien dat hun schema de prestaties en energie-effici??ntie aanzienlijk kan verbeteren in vergelijking met een standaard GPU zonder prioritering.

### Virtuele geheugenpaginaplaatsing
GPU's hebben traditioneel vertrouwd op handmatig geheuienbeheer, waarbij de programmeur verantwoordelijk is voor het expliciet toewijzen en vrijgeven van geheugen. Recente GPU's ondersteunen echter virtueel geheugen, waardoor het besturingssysteem geheugenallocatie en -plaatsing automatisch kan beheren.

Onderzoek op dit gebied verkent technieken voor het optimaliseren van de plaatsing van virtuele geheugenspagina's in GPU's om de geheugentoegangslocaliteit te verbeteren en de adresvertaaloverhead te verminderen.

Bijvoorbeeld stellen Zheng et al. [2016] een paginaplaatsingsschema voor GPU's voor dat tot doel heeft de geheugentoegangslocaliteit te verbeteren door pagina's die vaak samen worden geopend, in hetzelfde geheugenkanaal of -bank te plaatsen. Het schema gebruikt een combinatie van hardware- en softwaretechnieken om de geheugentoegangpatronen van de toepassing te bewaken en dynamische paginaplaatsingsbeslissingen te nemen.

Een ander voorbeeld is het werk van Ganguly et al. [2019], dat een virtueel geheugenbeheerschema voor GPU's voorstelt dat tot doel heeft de adresvertaaloverhead te verminderen. Het schema gebruikt een combinatie van hardware- en softwaretechniekenHier is de Nederlandse vertaling van het Markdown-bestand, waarbij de code-opmerkingen zijn vertaald:

### Gegevensplaatsing
De plaatsing van gegevens in de GPU-geheuërarchie kan een aanzienlijke invloed hebben op de geheugentoegangslocaliteit en prestaties. Het optimaliseren van gegevensplaatsing kan helpen om de geheugenlatentie te verminderen, het cachegebruik te verbeteren en het geheugenbandbreedte-gebruik te verhogen.

Onderzoek op dit gebied verkent technieken voor het optimaliseren van gegevensplaatsing in GPU's op basis van de geheugentoegangpatronen en resourcevereisten van de toepassing.

Bijvoorbeeld stellen Agarwal et al. [2015] een gegevensplaatsingsschema voor GPU's voor dat tot doel heeft de geheugentoegangslocaliteit te verbeteren door gegevens die vaak samen worden geopend, in hetzelfde geheugenkanaal of -bank te plaatsen. Het schema gebruikt een combinatie van statische en dynamische analyse om de optimale gegevensplaatsing voor elke toepassing te bepalen.

Een ander voorbeeld is het werk van Tang et al. [2017], waarin een gegevensplaatsingsschema voor GPU's wordt voorgesteld dat tot doel heeft het geheugenbandbreedte-gebruik te verbeteren door gegevens in verschillende geheugenkanalen te plaatsen op basis van hun toegangspatronen. Het schema gebruikt een op machine learning gebaseerde benadering om de geheugentoegangpatronen van de toepassing te voorspellen en dynamische gegevensplaatsingsbeslissingen te nemen.

### Multi-Chip-Module GPU's
Naarmate de prestatie- en stroomvereisten van GPU's blijven toenemen, kunnen traditionele single-chip-ontwerpen mogelijk niet meer aan de vraag voldoen. Multi-chip-module (MCM)-ontwerpen, waarbij meerdere GPU-chips in één pakket zijn geïntegreerd, zijn naar voren gekomen als een veelbelovende oplossing voor dit probleem.

Onderzoek op dit gebied verkent het ontwerp en de optimalisatie van MCM-GPU's, waaronder de geheugenarchitectuur, het interconnect-ontwerp en het resourcebeheer.

Bijvoorbeeld stellen Arunkumar et al. [2017] een MCM-GPU-ontwerp voor dat gebruikmaakt van een hoogwaardige, laaglatente interconnect om meerdere GPU-chips met elkaar te verbinden. De auteurs stellen ook een geheugenarchitectuur voor die...Hier is de Nederlandse vertaling van het bestand:

Het gebruik van het MCM-ontwerp (Multi-Chip Module) maakt het mogelijk om de bandbreedte en capaciteit te verhogen, waardoor de prestaties en energie-efficiëntie kunnen worden verbeterd.

Een ander voorbeeld is het werk van Milic et al. [2018], waarin een resourcemanagementschema voor MCM-GPU's wordt voorgesteld, met als doel de resourcebenutting te verbeteren en de communicatie-overhead tussen chips te verminderen. Het schema gebruikt een combinatie van hardware- en softwaretechnieken om het resourcegebruik en de communicatiepatronen van de toepassing te bewaken en dynamische resourceallocatiebeslissingen te nemen.

## Conclusie
Het geheugensysteem is een kritische component van moderne GPU-architecturen, en het ontwerp en de optimalisatie ervan kunnen een aanzienlijke invloed hebben op de algehele systeemprestaties en -efficiëntie. Naarmate de eisen van parallelle werkbelastingen blijven groeien, verkennen onderzoekers een breed scala aan technieken om de prestaties, schaalbaarheid en aanpasbaarheid van GPU-geheugensystemen te verbeteren.

Enkele van de belangrijkste onderzoeksrichtingen op dit gebied zijn geheugenadresplanning en interconnect-ontwerp, caching-effectiviteit, prioritering van geheugenaanvragen en cache-omzeiling, het benutten van inter-warp-heterogeniteit, gecoördineerde cache-omzeiling, adaptief cache-beheer, cache-prioritering, virtuele geheugenplaatsing, gegevensplaatsing en multi-chip-module-ontwerpen.

Door deze en andere technieken te verkennen, streven onderzoekers ernaar GPU-geheugensystemen te ontwikkelen die kunnen voldoen aan de toenemende eisen van parallelle werkbelastingen, terwijl ze een hoge prestatie en energie-efficiëntie behouden. Naarmate GPU's blijven evolueren en nieuwe toepassingen vinden op gebieden als machine learning, wetenschappelijke berekeningen en data-analyse, zal het ontwerp en de optimalisatie van hun geheugensystemen een belangrijk onderzoeks- en innovatiegebied blijven.