Jak projektować układy GPU
Chapter 4 Gpu Memory System Design

Rozdział 4: Projektowanie systemu pamięci GPU

Jednostki przetwarzania graficznego (GPU) ewoluowały w wysoce równoległe, programowalne akceleratory zdolne do osiągania wysokiej wydajności i efektywności energetycznej w szerokim zakresie zastosowań. System pamięci jest kluczowym elementem nowoczesnych architektur GPU, ponieważ musi dostarczać ogromnej liczbie współbieżnych wątków szybki dostęp do danych. W tym rozdziale zbadamy kluczowe elementy projektowania systemu pamięci GPU, w tym struktury pamięci pierwszego poziomu, wewnętrzną sieć połączeń, jednostki podziału pamięci oraz kierunki badań dla przyszłych systemów pamięci GPU.

Struktury pamięci pierwszego poziomu

Struktury pamięci pierwszego poziomu w GPU odpowiadają za zapewnienie szybkiego dostępu do często używanych danych i zmniejszenie liczby dostępów do niższych poziomów hierarchii pamięci. Te struktury zwykle obejmują pamięć podręczną, pamięć podręczną danych L1 i pamięć podręczną tekstur L1.

Pamięć podręczna i pamięć podręczna danych L1

Pamięć podręczna, znana również jako pamięć współdzielona w modelu programowania CUDA firmy NVIDIA lub pamięć lokalna w OpenCL, jest przestrzenią pamięci o niskiej latencji, zarządzaną przez oprogramowanie, współdzieloną przez wszystkie wątki w obrębie tablicy współbieżnych wątków (CTA) lub grupy roboczej. Pamięć podręczna jest zwykle implementowana przy użyciu struktury SRAM z podziałem na banki, aby umożliwić równoległy dostęp wielu wątków.

Rysunek 4.1 ilustruje zjednoczoną organizację pamięci podręcznej danych L1 i pamięci podręcznej, podobną do projektu używanego w architekturach Fermi i Kepler firmy NVIDIA [Minkin i in., 2012].

                                    Przełącznik adresowy
                                          |
                                          v
                        Tablica danych (Konfigurowalny jako pamięć podręczna lub pamięć)
                                          |
                                          v  
                                    Przełącznik danych
                                          |
                                          v
                                 Jednostka ładowania/przechowywania
```Tutaj jest polski przekład pliku Markdown. Dla kodu, nie tłumaczono kodu, tylko komentarze.

Rysunek 4.1: Zjednoczona organizacja pamięci podręcznej L1 i pamięci scratchpad.

Kluczowe komponenty tego projektu to:

1. **Tablica danych**: Wysoce podzielona struktura SRAM, która może być skonfigurowana jako pamięć scratchpad lub pamięć podręczna L1 danych. Każdy bank ma szerokość 32 bity i ma własny dekoder do niezależnego dostępu.

2. **Przełącznik adresowy**: Rozprowadza adresy pamięci z jednostki ładowania/przechowywania do odpowiednich banków w tablicy danych.

3. **Przełącznik danych**: Przekierowuje dane z banków do jednostki ładowania/przechowywania, która następnie zapisuje dane do rejestru.

4. **Jednostka ładowania/przechowywania**: Oblicza adresy pamięci, stosuje reguły koalescencji i dzieli dostępy do pamięci na pojedyncze scalone dostępy.

Dostępy do pamięci scratchpad omijają etap wyszukiwania znaczników, ponieważ pamięć jest bezpośrednio mapowana. Konflikty banków są obsługiwane przez podzielenie konfliktowych dostępów na wiele cykli, przy czym konfliktujące części są powtarzane w kolejnych cyklach.

Pamięć podręczna L1 danych służy do przechowywania podzbioru globalnej przestrzeni adresowej pamięci. Dostępy do pamięci podręcznej L1 danych wymagają wyszukiwania znaczników, aby określić, czy żądane dane są obecne. Rozmiar bloku pamięci podręcznej wynosi zwykle 128 bajtów, który może być dodatkowo podzielony na sektory 32-bajtowe, aby dopasować się do minimalnego rozmiaru danych, który można odczytać z graficznej pamięci DRAM (np. GDDR5) w pojedynczym dostępie.

### Pamięć podręczna tekstur L1

Pamięć tekstur to przestrzeń pamięci tylko do odczytu, zoptymalizowana pod kątem lokalności przestrzennej i powszechnie używana w obciążeniach graficznych. Pamięć podręczna tekstur L1 jest zaprojektowana w celu wykorzystania lokalności przestrzennej 2D obecnej w dostępach do tekstur.

Rysunek 4.2 pokazuje typową organizację pamięci podręcznej tekstur L1.Oto polski przekład pliku w formacie markdown:

rray
                                  |
                                  v
                           Filtrowanie tekstur
                                  |
                                  v
                           Przefiltrowane tekstele

Rysunek 4.2: Organizacja pamięci podręcznej tekstur L1.

Główne komponenty pamięci podręcznej tekstur L1 to:

  1. Mapowanie adresów: Konwertuje współrzędne tekstury na adresy w pamięci podręcznej.

  2. Tablica tagów: Przechowuje tagi dla każdej linii pamięci podręcznej, aby określić, czy żądane dane są obecne.

  3. Tablica danych: Przechowuje rzeczywiste dane tekstury.

  4. Filtrowanie tekstur: Wykonuje operacje interpolacji i filtrowania na pobranych danych tekstury, aby wygenerować ostateczne przefiltrowane tekstele.

Pamięć podręczna tekstur L1 zazwyczaj wykorzystuje organizację opartą na kafelkach, aby wykorzystać lokalność przestrzenną. Pamięć podręczna jest podzielona na mniejsze kafelki (np. 4x4 lub 8x8 teksteli), a każdy kafelek jest przechowywany w sposób ciągły, aby zminimalizować liczbę linii pamięci podręcznej dostępnych dla danego pobrania tekstury.

Ujednolicona pamięć podręczna danych i tekstur

Najnowsze architektury GPU, takie jak NVIDIA Maxwell i Pascal, wprowadziły ujednoliconą pamięć podręczną danych i tekstur, aby poprawić wykorzystanie pamięci podręcznej i zmniejszyć całkowity rozmiar pamięci podręcznej [Heinrich et al., 2017]. W tym projekcie pamięć podręczna danych L1 i pamięć podręczna tekstur L1 są połączone w jedną fizyczną pamięć podręczną, z możliwością dynamicznego alokowania pojemności między nimi w zależności od wymagań obciążenia.

Rysunek 4.3 ilustruje organizację ujednoliconej pamięci podręcznej danych i tekstur.

                                Żądania pamięci
                                       |
                                       v
                                 Kontroler pamięci podręcznej
                                /             \
                               /               \
                              /                 \
                             v                   v
                     Partycja pamięci podręcznej danych   Partycja pamięci podręcznej tekstur
                             |Oto tłumaczenie pliku Markdown na język polski. Komentarze w kodzie zostały przetłumaczone, a sam kod pozostał niezmieniony.

Rysunek 4.3: Zjednoczona organizacja pamięci podręcznej tekstur i danych.

Główne komponenty projektu zjednoczonej pamięci podręcznej to:

  1. Kontroler pamięci podręcznej: Odbiera żądania pamięci i określa, czy powinny być obsługiwane przez partycję pamięci podręcznej danych, czy partycję pamięci podręcznej tekstur.

  2. Partycja pamięci podręcznej danych: Obsługuje dostępy do globalnej przestrzeni pamięci, podobnie jak samodzielna pamięć podręczna danych L1.

  3. Partycja pamięci podręcznej tekstur: Obsługuje dostępy do pamięci tekstur, podobnie jak samodzielna pamięć podręczna tekstur L1.

  4. Tablica danych: Wspólna tablica danych, która przechowuje zarówno dane pamięci globalnej, jak i dane tekstur.

Projekt zjednoczonej pamięci podręcznej pozwala na lepsze wykorzystanie dostępnej pojemności pamięci podręcznej, ponieważ rozmiary partycji mogą być dostosowywane w zależności od wzorców dostępu obciążenia. Ta elastyczność może prowadzić do poprawy wydajności i efektywności energetycznej w porównaniu z pamięciami podręcznymi L1 o stałych rozmiarach.

Sieć połączeń wewnętrznych

Sieć połączeń wewnętrznych jest odpowiedzialna za łączenie rdzeni GPU (zwanych również wieloprocesorami strumieniowymi lub jednostkami obliczeniowymi) z jednostkami partycji pamięci. Połączenie musi zapewniać wysoką przepustowość i niską latencję, aby wspierać masową równoległość w obciążeniach GPU.

Nowoczesne karty graficzne zwykle wykorzystują topologię krzyżową lub siatki dla wewnętrznej sieci połączeń. Topologia krzyżowa zapewnia pełną łączność między wszystkimi rdzeniami i partycjami pamięci, umożliwiając komunikację o wysokiej przepustowości kosztem zwiększonego obszaru i zużycia energii. Topologia siatki, z drugiej strony, oferuje bardziej skalowalny rozwiązanie, łącząc każdy rdzeń z sąsiednimi rdzeniami i partycjami pamięci, tworząc strukturę siatki.

Rysunek 4.4 przedstawia przykład połączenia siatki w GPU.


|      |
        Rdzeń   Rdzeń   Rdzeń   Rdzeń
         |      |      |      |
        ——     ——     ——     ——  
         |      |      |      |
        Rdzeń   Rdzeń   Rdzeń   Rdzeń
         |      |      |      |
        ——     ——     ——     ——
         |      |      |      |  
        Pamięć Pamięć Pamięć Pamięć
        Część. Część. Część. Część.

Rysunek 4.4: Sieć połączeń typu mesh w GPU.

Sieć połączeń typu mesh umożliwia wydajny transfer danych między rdzeniami a partycjami pamięci, minimalizując przy tym zajmowaną powierzchnię i zużycie energii. Zaawansowane algorytmy routingu i mechanizmy kontroli przepływu są stosowane w celu zapewnienia wysokiej wydajności i uniknięcia zatłoczenia.

Jednostka Partycji Pamięci

Jednostka partycji pamięci odpowiada za obsługę żądań pamięci pochodzących z rdzeni GPU i zarządzanie zewnętrzną pamięcią DRAM. Każda partycja pamięci zwykle zawiera pamięć podręczną L2, obsługę operacji atomowych oraz harmonogram dostępu do pamięci.

Pamięć Podręczna L2

Pamięć podręczna L2 jest współdzieloną pamięcią podręczną umieszczoną między rdzeniami GPU a zewnętrzną pamięcią DRAM. Jej głównym celem jest zmniejszenie liczby dostępów do wysokoopóźnionej i energochłonnej pamięci DRAM poprzez buforowanie często używanych danych.

Pamięci podręczne L2 w GPU są zwykle zaprojektowane jako pamięć asocjacyjna ze zmiennym rozmiarem bloku, z dużą pojemnością (np. 2-4 MB) i wysoką przepustowością. Pamięć podręczna L2 jest podzielona na wiele partycji pamięci, aby umożliwić równoległy dostęp i poprawić przepustowość.

Rysunek 4.5 ilustruje organizację pamięci podręcznej L2 w partycji pamięci GPU.

                            Żądania Pamięci
                                   |
                                   v
                         Kontroler Pamięci Podręcznej L2
                                   |
                                   v
                              Tablica Tagów
                                   |
                                   v
                              Tablica Danych
                                   |
                                   v
                             Harmonogram Pamięci
```Poniżej znajduje się tłumaczenie pliku Markdown na język polski. Komentarze w kodzie zostały przetłumaczone, a sam kod pozostał niezmieniony.

Rysunek 4.5: Organizacja pamięci podręcznej L2 w partycji pamięci GPU.

Kontroler pamięci podręcznej L2 odbiera żądania pamięci z rdzeni GPU i sprawdza tablicę tagów, aby określić, czy żądane dane znajdują się w pamięci podręcznej. W przypadku trafienia w pamięci podręcznej, dane są pobierane z tablicy danych i wysyłane z powrotem do żądającego rdzenia. W przypadku braku trafienia w pamięci podręcznej, żądanie jest przekazywane do planisty pamięci, który następnie pobiera dane z pamięci DRAM.

Operacje atomowe

Operacje atomowe są niezbędne do synchronizacji i komunikacji między wątkami w obciążeniach równoległych. Karty GPU obsługują różne operacje atomowe, takie jak dodawanie atomowe, minimum, maksimum i porównanie-i-zamiana, które gwarantują atomowość, gdy wiele wątków jednocześnie uzyskuje dostęp do tego samego miejsca w pamięci.

Operacje atomowe są zwykle implementowane w jednostkach partycji pamięci, aby zapewnić niską latencję i wysoką przepustowość wykonania. Dedykowane jednostki sprzętowe, takie jak jednostki operacji atomowych (AOU), są wykorzystywane do efektywnej obsługi żądań atomowych.

Rysunek 4.6 przedstawia przykład jednostki operacji atomowych w partycji pamięci GPU.

                            Żądania atomowe
                                   |
                                   v
                          Jednostka Operacji Atomowych
                                   |
                                   v
                            Pamięć podręczna L2/DRAM

Rysunek 4.6: Jednostka operacji atomowych w partycji pamięci GPU.

AOU odbiera żądania atomowe z rdzeni GPU i wykonuje żądaną operację na docelowej lokalizacji pamięci. Jeśli lokalizacja pamięci znajduje się w pamięci podręcznej L2, AOU bezpośrednio aktualizuje dane w pamięci podręcznej. Jeśli lokalizacja pamięci nie jest buforowana, AOU pobiera dane z pamięci DRAM, wykonuje operację atomową, a następnie zapisuje wynik z powrotem do pamięci DRAM.

Planista dostępu do pamięci

Planista dostępu do pamięci jest odpowiedzialny za zarządzanie przepływem


Żądania pamięci do zewnętrznej pamięci DRAM. Jego głównym celem jest maksymalizacja wykorzystania przepustowości pamięci DRAM, jednocześnie minimalizując opóźnienie dostępu do pamięci.

Planisty pamięci GPU wykorzystują różne algorytmy planowania i optymalizacje, aby osiągnąć wysoką wydajność. Niektóre powszechne techniki obejmują:

1. **Planowanie poza kolejnością**: Ponowne porządkowanie żądań pamięci w celu maksymalizacji trafień w buforze wiersza i minimalizacji narzutu przełączania banków i aktywacji pamięci DRAM.

2. **Równoległość na poziomie banku**: Wykorzystywanie równoległości dostępnej w wielu bankach pamięci DRAM, aby umożliwić równoczesny dostęp do różnych regionów pamięci.

3. **Optymalizacja przełączania między zapisem a odczytem**: Minimalizacja kary opóźnienia poniesionej podczas przełączania między operacjami zapisu i odczytu w pamięci DRAM.

4. **Rozpraszanie adresów**: Rozdzielanie dostępów do pamięci między różne kanały, rangi i banki, aby maksymalizować równoległość i unikać konfliktów.

Rysunek 4.7 ilustruje ogólny widok planisty dostępu do pamięci w partycji pamięci GPU.

Żądania pamięci | v Planista pamięci | v Kanał Kanał Kanał Kanał | | | | v v v v Ranga Ranga Ranga Ranga | | | | v v v v
Bank Bank Bank Bank

Rysunek 4.7: Planista dostępu do pamięci w partycji pamięci GPU.

Planista pamięci otrzymuje żądania pamięci z pamięci podręcznej L2 i jednostek operacji atomowych, a następnie decyduje, kiedy i w jakiej kolejności wysyłać te żądania do pamięci DRAM. Dzięki starannego planowania dostępów do pamięci, planista może znacznie poprawić wykorzystanie przepustowości pamięci DRAM i zmniejszyć średnie opóźnienie dostępu do pamięci.

## BadaniaKierunki badań nad systemami pamięci GPU

Wraz z ewolucją architektur GPU i rosnącymi wymaganiami obciążeń równoległych, istnieje kilka kierunków badawczych mających na celu poprawę wydajności i efektywności systemów pamięci GPU. Niektóre z kluczowych obszarów badawczych obejmują:

### Planowanie dostępu do pamięci i projektowanie sieci połączeń
Wraz ze wzrostem liczby rdzeni i partycji pamięci w GPU, projektowanie planisty dostępu do pamięci i sieci połączeń staje się kluczowe dla osiągnięcia wysokiej wydajności. Badania w tej dziedzinie koncentrują się na opracowywaniu nowych algorytmów planowania i topologii połączeń, które mogą efektywnie obsługiwać masową równoległość i złożone wzorce dostępu do pamięci w obciążeniach GPU.

Na przykład Jia i in. [2012] proponują algorytm planowania pamięci o nazwie "Staged Memory Scheduling" (SMS), który ma na celu poprawę równoległości na poziomie banków DRAM i zmniejszenie opóźnienia dostępu do pamięci. SMS dzieli kolejkę żądań pamięci na dwa etapy: tworzenie partii i planowanie partii. W etapie tworzenia partii, żądania są grupowane w partie na podstawie ich adresów banków i wierszy, aby wykorzystać lokalność wierszy. W etapie planowania partii, partie są priorytetyzowane na podstawie ich wieku i krytyczności, aby zapewnić sprawiedliwość i zmniejszyć przestoje.

Innym przykładem jest praca Kim i in. [2012], która proponuje architekturę pamięci o wysokiej przepustowości (HBM) dla GPU. HBM układa wiele warstw pamięci DRAM jedna na drugiej i łączy je za pomocą otworów przez krzem (TSV), umożliwiając znacznie większą przepustowość i mniejsze opóźnienie w porównaniu z tradycyjnymi pamięciami GDDR. Autorzy proponują również nową konstrukcję kontrolera pamięci, który może efektywnie zarządzać zwiększoną równoległością i złożonością HBM.

### Efektywność pamięci podręcznej
GPU wykorzystują różne mechanizmy pamięci podręcznej, aby zmniejszyć liczbę dostępów do pamięci zewnętrznej i poprawić wydajność. Jednak skuteczność tych pamięci podręcznych może znacznie różnić się w zależności od charakterystyki obciążenia i projektu pamięci podręcznej.Oto tłumaczenie pliku Markdown na język polski. Komentarze w kodzie zostały przetłumaczone, ale sam kod pozostał niezmieniony.

Badania w tej dziedzinie mają na celu poprawę efektywności pamięci podręcznej GPU poprzez techniki takie jak omijanie pamięci podręcznej, kompresja pamięci podręcznej i adaptacyjne zarządzanie pamięcią podręczną.

Na przykład, Huangfu i Xie [2016] proponują dynamiczny schemat omijania pamięci podręcznej dla GPU, który używa prostej, ale skutecznej heurystyki, aby określić, czy żądanie pamięci powinno być buforowane czy pominięte na podstawie jego odległości ponownego użycia. Schemat dostosowuje się do zachowania aplikacji w czasie rzeczywistym i może znacznie zmniejszyć zanieczyszczenie pamięci podręcznej i poprawić wydajność.

Innym przykładem jest praca Vijaykumara i in. [2015], która proponuje architekturę skompresowanej pamięci podręcznej dla GPU. Autorzy zauważają, że wiele aplikacji GPU wykazuje znaczną redundancję danych, którą można wykorzystać, aby zwiększyć efektywną pojemność pamięci podręcznej. Proponują oni nowy schemat kompresji, który może osiągnąć wysokie współczynniki kompresji, jednocześnie powodując minimalny narzut opóźnienia.

### Priorytetyzacja żądań pamięci i omijanie pamięci podręcznej
W GPU, żądania pamięci z różnych warpi i wątków mogą mieć różne poziomy krytyczności i wpływ na ogólną wydajność. Priorytetyzacja krytycznych żądań i omijanie nieistotnych może pomóc w zmniejszeniu opóźnienia pamięci i poprawie wykorzystania zasobów.

Badania w tej dziedzinie badają techniki identyfikacji i priorytetyzacji krytycznych żądań pamięci, a także mechanizmy selektywnego omijania pamięci podręcznej.

Na przykład, Jog i in. [2013] proponują schemat priorytetyzacji żądań pamięci o nazwie "Critical-Aware Warp Acceleration" (CAWA). CAWA identyfikuje krytyczne warpy, które prawdopodobnie spowodują zablokowanie potoku, i priorytetyzuje ich żądania pamięci nad żądaniami warpów nieistotnych. Schemat wykorzystuje kombinację informacji statycznych i dynamicznych, takich jak liczba zależnych instrukcji i wiek warpu, aby określić krytyczność.

Lee i in. [2015] proponują schemat omijania pamięci podręcznej dla GPU, który ma na celu zmniejszenie zanieczyszczenia pamięci podręcznej i poprawę terminowości dostępów do pamięci. Schemat wykorzystuje oparty na PC schemat omijania pamięci podręcznej, który dynamicznie dostosowuje się do zachowania aplikacji.Oto tłumaczenie pliku Markdown na język polski. Komentarze w kodzie zostały przetłumaczone, a sam kod pozostał niezmieniony.

Mechanizm predykcji do identyfikacji żądań pamięci, które prawdopodobnie nie odniosą korzyści z pamięci podręcznej, i omijanie ich bezpośrednio do niższego poziomu hierarchii pamięci. Autorzy pokazują, że ich schemat może znacząco poprawić wydajność i efektywność energetyczną w porównaniu do podstawowej architektury GPU bez omijania.

### Wykorzystywanie heterogeniczności międzywątkowej
Procesory GPU wykonują jednocześnie dużą liczbę wątków, aby ukryć opóźnienia pamięci i osiągnąć wysoką przepustowość. Jednak różne wątki mogą wykazywać znaczną heterogeniczność pod względem wymagań zasobów, wzorców dostępu do pamięci i charakterystyki wydajności.

Badania w tej dziedzinie mają na celu wykorzystanie tej heterogeniczności międzywątkowej w celu poprawy alokacji zasobów, harmonogramowania i zarządzania pamięcią w procesorach GPU.

Na przykład Kayıran i in. [2014] proponują schemat zarządzania pamięcią podręczną świadomy rozbieżności na poziomie wątków, który dynamicznie dostosowuje polityki alokacji i wymiany pamięci podręcznej w oparciu o charakterystykę rozbieżności każdego wątku. Wątki o wysokiej rozbieżności otrzymują więcej zasobów pamięci podręcznej, aby zmniejszyć rozbieżność pamięci, podczas gdy wątki o niskiej rozbieżności otrzymują mniej zasobów, aby poprawić wykorzystanie pamięci podręcznej.

Innym przykładem jest praca Sethii i in. [2015], która proponuje projekt kontrolera pamięci wykorzystujący heterogeniczność międzywątkową w celu poprawy równoległości na poziomie banków pamięci DRAM. Autorzy zauważają, że różne wątki mogą mieć różne stopnie równoległości na poziomie banków, i proponują algorytm harmonogramowania pamięci świadomy wątków, który priorytetyzuje wątki o wysokiej równoległości banków, aby zmniejszyć rywalizację o pamięć i poprawić przepustowość systemu.

### Skoordynowane omijanie pamięci podręcznej
Omijanie pamięci podręcznej to technika, która pozwala żądaniom pamięci pominąć pamięć podręczną i bezpośrednio uzyskać dostęp do niższego poziomu hierarchii pamięci. Chociaż omijanie może pomóc w zmniejszeniu zanieczyszczenia pamięci podręcznej i poprawie terminowości dostępu do pamięci, nieskoordynowane decyzje o omijaniu między różnymi rdzeniami i sekcjami pamięci mogą prowadzić do suboptymalneOto polski przekład pliku w formacie Markdown. Dla kodu, nie tłumaczono kodu, tylko komentarze.

Wykorzystanie koordynacji decyzji o ominięciu pamięci podręcznej na GPU w celu poprawy ogólnej wydajności systemu i wykorzystania zasobów.

Na przykład Li i in. [2015] proponują skoordynowany schemat ominięcia pamięci podręcznej dla procesorów GPU, który wykorzystuje scentralizowany kontroler ominięcia do podejmowania globalnych decyzji o ominięciu. Kontroler zbiera informacje o czasie działania z każdego rdzenia, takie jak wskaźniki błędów pamięci podręcznej i wzorce dostępu do pamięci, i wykorzystuje te informacje do określenia optymalnej strategii ominięcia dla każdego rdzenia. Autorzy pokazują, że ich schemat może znacznie poprawić wydajność i efektywność energetyczną w porównaniu z nieskoordynowanym ominięciem.

### Adaptacyjne zarządzanie pamięcią podręczną
Optymalna konfiguracja pamięci podręcznej dla aplikacji GPU może znacznie różnić się w zależności od jej wzorców dostępu do pamięci, rozmiaru zestawu roboczego i wymagań dotyczących zasobów. Statyczne zasady zarządzania pamięcią podręczną, które są ustalone w czasie projektowania, mogą nie być w stanie dostosować się do różnorodnego i dynamicznego zachowania różnych aplikacji.

Badania w tej dziedzinie badają techniki dynamicznego dostosowywania konfiguracji i zasad zarządzania pamięcią podręczną w oparciu o zachowanie aplikacji w czasie działania.

Na przykład Wang i in. [2016] proponują adaptacyjny schemat zarządzania pamięcią podręczną dla procesorów GPU, który dynamicznie dostosowuje rozmiary partycji pamięci podręcznej i zasady zastępowania w oparciu o wzorce dostępu do pamięci aplikacji. Schemat wykorzystuje kombinację technik sprzętowych i programowych do monitorowania zachowania pamięci podręcznej i dokonywania dynamicznych dostosowań w celu poprawy wykorzystania i wydajności pamięci podręcznej.

Innym przykładem jest praca Dai i in. [2018], która proponuje oparty na uczeniu maszynowym podejście do adaptacyjnego zarządzania pamięcią podręczną w procesorach GPU. Autorzy wykorzystują uczenie ze wzmocnieniem do automatycznego uczenia optymalnej konfiguracji pamięci podręcznej dla każdej aplikacji w oparciu o jej zachowanie w czasie działania. Wyuczone zasady są następnie wdrażane przy użyciu rekonfigurowalnej architektury pamięci podręcznej, która może dostosować się do konkretnych potrzeb każdej aplikacji.

### Priorytetyzacja pamięci podręcznej
W procesorach GPU różne typyOto polski przekład pliku:

Żądania pamięci, takie jak ładowanie, przechowywanie i żądania tekstury, mogą mieć różne wymagania dotyczące opóźnień i przepustowości. Priorytetyzacja określonych typów żądań nad innymi może pomóc w poprawie ogólnej wydajności systemu i wykorzystania zasobów.

Badania w tej dziedzinie badają techniki priorytetyzacji różnych typów żądań pamięci w hierarchii pamięci podręcznej GPU.

Na przykład Zhao i in. [2018] proponują schemat priorytetyzacji pamięci podręcznej dla GPU, który przypisuje różne priorytety różnym typom żądań pamięci w oparciu o ich krytyczność i wrażliwość na opóźnienia. Schemat wykorzystuje kombinację statycznych i dynamicznych informacji, takich jak typ instrukcji i liczba zależnych instrukcji, aby określić priorytet każdego żądania. Autorzy pokazują, że ich schemat może znacząco poprawić wydajność i efektywność energetyczną w porównaniu do podstawowego GPU bez priorytetyzacji.

### Rozmieszczenie stron pamięci wirtualnej
Tradycyjnie GPU polegały na ręcznym zarządzaniu pamięcią, gdzie programista jest odpowiedzialny za jawne alokowanie i zwalnianie pamięci. Jednak najnowsze GPU zaczęły obsługiwać pamięć wirtualną, co pozwala systemowi operacyjnemu na automatyczne zarządzanie alokacją i rozmieszczeniem pamięci.

Badania w tej dziedzinie badają techniki optymalizacji rozmieszczenia stron pamięci wirtualnej w GPU w celu poprawy lokalności dostępu do pamięci i zmniejszenia narzutu tłumaczenia adresów.

Na przykład Zheng i in. [2016] proponują schemat rozmieszczania stron dla GPU, który ma na celu poprawę lokalności dostępu do pamięci poprzez umieszczanie stron, do których często się odwołuje, w tym samym kanale lub banku pamięci. Schemat wykorzystuje kombinację technik sprzętowych i programowych do monitorowania wzorców dostępu do pamięci aplikacji i podejmowania dynamicznych decyzji o rozmieszczeniu stron.

Innym przykładem jest praca Ganguly'ego i in. [2019], która proponuje schemat zarządzania pamięcią wirtualną dla GPU, mający na celu zmniejszenie narzutu tłumaczenia adresów. Schemat wykorzystuje kombinację technik sprzętowych i programowych.Proszę o dostarczenie polskiego tłumaczenia tego pliku Markdown. W przypadku kodu, nie tłumacz kodu, tylko tłumacz komentarze. Oto plik:

, takie jak buforowanie translacji adresów (TLB) i kompresja tabeli stron, w celu zmniejszenia opóźnienia i zużycia przepustowości podczas translacji adresów.

### Umieszczenie danych
Umieszczenie danych w hierarchii pamięci GPU może mieć znaczący wpływ na lokalność dostępu do pamięci i wydajność. Optymalizacja umieszczenia danych może pomóc w zmniejszeniu opóźnienia pamięci, poprawie wykorzystania pamięci podręcznej i zwiększeniu wykorzystania przepustowości pamięci.

Badania w tej dziedzinie badają techniki optymalizacji umieszczenia danych w GPU w oparciu o wzorce dostępu do pamięci i wymagania zasobów aplikacji.

Na przykład Agarwal i in. [2015] proponują schemat umieszczenia danych dla GPU, który ma na celu poprawę lokalności dostępu do pamięci poprzez umieszczanie danych, do których często się odwołuje, w tym samym kanale lub banku pamięci. Schemat wykorzystuje kombinację analizy statycznej i dynamicznej, aby określić optymalne umieszczenie danych dla każdej aplikacji.

Innym przykładem jest praca Tanga i in. [2017], która proponuje schemat umieszczenia danych dla GPU, mający na celu poprawę wykorzystania przepustowości pamięci poprzez umieszczanie danych w różnych kanałach pamięci w zależności od ich wzorców dostępu. Schemat wykorzystuje podejście oparte na uczeniu maszynowym do przewidywania wzorców dostępu do pamięci aplikacji i podejmowania dynamicznych decyzji o umieszczeniu danych.

### Wieloczipowe moduły GPU
Ponieważ wymagania dotyczące wydajności i mocy GPU stale rosną, tradycyjne projekty jednoczipowe mogą nie być w stanie nadążyć za tym zapotrzebowaniem. Projekty wieloczipowe (MCM), w których wiele układów GPU jest zintegrowanych w jednym pakiecie, wyłoniły się jako obiecujące rozwiązanie tego problemu.

Badania w tej dziedzinie badają projektowanie i optymalizację wieloczipowych modułów GPU, w tym architekturę systemu pamięci, projekt połączeń i zarządzanie zasobami.

Na przykład Arunkumar i in. [2017] proponują projekt GPU MCM, który wykorzystuje szybkie, niskooóźnione połączenie do łączenia wielu układów GPU. Autorzy proponują również architekturę systemu pamięci, która wykorzystujeProszę o polskie tłumaczenie tego pliku Markdown. W przypadku kodu, nie tłumacz kodu, tylko komentarze. Oto plik:

Wykorzystanie zwiększonej przepustowości i pojemności projektu MCM w celu poprawy wydajności i efektywności energetycznej.

Innym przykładem jest praca Milica i in. [2018], która proponuje schemat zarządzania zasobami dla kart graficznych MCM, mający na celu poprawę wykorzystania zasobów i zmniejszenie narzutu komunikacji międzychipowej. Schemat wykorzystuje kombinację technik sprzętowych i programowych do monitorowania wykorzystania zasobów i wzorców komunikacji aplikacji oraz podejmowania dynamicznych decyzji o alokacji zasobów.

## Wniosek
System pamięci jest kluczowym elementem nowoczesnych architektur kart graficznych, a jego projekt i optymalizacja mogą mieć znaczący wpływ na ogólną wydajność i efektywność systemu. Wraz ze wzrostem wymagań obciążeń równoległych, badacze eksplorują szeroką gamę technik mających na celu poprawę wydajności, skalowalności i adaptacyjności systemów pamięci kart graficznych.

Niektóre z kluczowych kierunków badawczych w tej dziedzinie obejmują: harmonogramowanie dostępu do pamięci i projektowanie połączeń, efektywność pamięci podręcznej, priorytetyzacja żądań pamięci i omijanie pamięci podręcznej, wykorzystywanie heterogeniczności międzywątków, skoordynowane omijanie pamięci podręcznej, adaptacyjne zarządzanie pamięcią podręczną, priorytetyzacja pamięci podręcznej, rozmieszczenie stron pamięci wirtualnej, rozmieszczenie danych oraz projekty modułów wieloczipowych.

Poprzez eksplorację tych i innych technik, badacze dążą do opracowania systemów pamięci kart graficznych, które będą w stanie sprostać rosnącym wymaganiom obciążeń równoległych, zachowując przy tym wysoką wydajność i efektywność energetyczną. Ponieważ karty graficzne nadal ewoluują i znajdują nowe zastosowania w takich obszarach, jak uczenie maszynowe, obliczenia naukowe i analityka danych, projektowanie i optymalizacja ich systemów pamięci pozostanie ważnym obszarem badań i innowacji.