Co oznacza bankowość w odniesieniu do rejestrów?

13

Ta odpowiedź na pytanie StackOverflow dotyczące tego, co oznacza bankowość w kontekście rejestrów bankowych ARM, wskazuje na pewne zamieszanie co do znaczenia bankowości w odniesieniu do rejestrów.

Co oznacza bankowość w odniesieniu do rejestrów?

Paul A. Clayton
źródło

Odpowiedzi:

16

Słowo bankowość stosuje się w dwóch różnych sensach, gdy stosuje się je do rejestrów.

Rejestry bankowe do obsługi przerwań

Sens, z jakim dotyczy pytanie StackOverflow, jest podobny do użycia w przełączaniu banków (pamięci) (używanym przez niektóre procesory 8-bitowe i 16-bitowe) w funkcji . Nazwy kolekcji rejestrów są odwzorowane na inną kolekcję rejestrów fizycznych. ARMv7 zapewnia jeden dodatkowy bank dla 7 ze swoich 16 GPR i pięć kolejnych banków dla rejestru wskaźnika stosu i rejestru łącza (ARM używa rejestru łącza do zapisania komputera na wypadek powrotu z przerwania). Itanium zapewnia jeden dodatkowy bank dla 16 z 31 statycznych GPR. (MIPS zapewnia całe zestawy 31 GPR, nazywając je „zestawami rejestrów w tle”).

W przeciwieństwie do przełączania banków pamięci, głównym celem tego rodzaju bankowości rejestrów nie jest (zwykle) nie rozszerzanie adresowalnej pamięci, ale zapewnienie szybszej obsługi przerwań poprzez unikanie potrzeby zapisywania wartości rejestrów, wartości obciążenia używanych przez procedurę obsługi przerwań i przywracania oryginalnego zarejestrować wartości i uprościć obsługę przerwań.

(Użycie stosu aplikacji do zapisania stanu rejestru otwiera możliwość przepełnienia pamięci przydzielonej dla tego stosu, generując wyjątek, który następnie musi jakoś obsługiwać zapisywanie stanu. Gorzej, jeśli strona pamięci bezpośrednio powyżej granicy stosu jest zapisywalna przez eskalowano przywilej obsługi procedury obsługi przerwań, ale nie przez aplikację, wtedy aplikacja faktycznie pisze na stronie, na której nie ma uprawnień do zapisu. Niektóre ABI uniknęły tego problemu, definiując jeden lub więcej rejestrów jako niestabilnych w przerwie. To pozwala na przerwanie moduł obsługi, aby załadować wskaźnik do zapisywania stanu bez blokowania stanu aplikacji, ale w przeciwieństwie do rejestrów bankowych, takie zmienne rejestry przerwania zdefiniowane programowo nie mogą być zaufane, że nie zostaną zmienione przez oprogramowanie).

(Zaproponowano użycie takich banków rejestrów jako stałych okien, aby zwiększyć liczbę dostępnych rejestrów, np. „Zwiększenie liczby efektywnych rejestrów w procesorze o niskiej mocy za pomocą pliku rejestru okienkowego”, Rajiv A. Ravindran i in., 2003. Można również zauważyć podobieństwo do stosu rejestrów używanego do unikania zapisywania rejestru i przywracania narzutu dla wywołań funkcji, jak w Itanium i SPARC [który używa terminu „okna rejestrów”], chociaż mechanizmy te zazwyczaj zmieniają nazwy rejestrów zamiast je zamieniać na zewnątrz.)

Pod względem sprzętowym rejestry bankowe można wdrożyć, zmieniając nazwy rejestrów w dekodowaniu instrukcji. W przypadku stosunkowo złożonego systemu bankowego ARM byłby to prawdopodobnie preferowany mechanizm. W przypadku prostszego systemu bankowego, takiego jak używany przez Itanium z jednym dodatkowym bankiem o mocy dwóch numerów rejestrów, może być praktyczne włączenie zmiany nazwy do indeksowania samego pliku rejestru. (Oczywiście nie byłoby to zgodne z niektórymi formami zmiany nazwy stosowanymi do obsługi wykonywania poza kolejnością).

Uznając, że dostęp do różnych banków nie jest uzyskiwany w tym samym czasie, sprytna optymalizacja przy użyciu tego mechanizmu może zmniejszyć (ograniczone przewodowo) obciążenie obszaru bardzo mocno przeniesionego pliku rejestru za pomocą „rejestrów 3D”. (Technikę tę zaproponowano w kontekście okien rejestrów SPARC - „Trójwymiarowy plik rejestru dla procesorów superskalarnych”, Tremblay i in., 1995 - a Intel zastosował wariant SoEMT - „Wielowątkowy, chroniony przed parzystością” Pliki 128-Word Register w dwurdzeniowym procesorze z rodziny Itanium ”, Fetzer i in., 2005.)

Bankowość w celu zwiększenia liczby możliwych dostępów

Drugi sens, w którym termin „bankowość” jest używany w odniesieniu do rejestrów, dotyczy podziału zestawu rejestrów na grupy (banki), z których każdy może być dostępny równolegle. Korzystanie z czterech banków zwiększa maksymalną liczbę dostępów obsługiwaną czterokrotnie, umożliwiając każdemu bankowi obsługę mniejszej liczby portów dostępowych (zmniejszenie powierzchni i zużycie energii) dla danego efektywnego licznika dostępu. Jednak w zakresie, w jakim dostępy w danym cyklu nie są równomiernie rozdzielone między banki, maksymalna liczba dostępów nie zostanie osiągnięta. Nawet przy dużej liczbie banków w stosunku do pożądanej liczby dostępów, konflikty bankowe mogą, w najgorszym przypadku, ograniczyć faktyczną liczbę dostępu do liczby portów zapewnianych przez jeden bank.

Było wiele prac naukowych na temat plików rejestrów bankowych ( wyszukiwarka Google Scholar) oraz zaproponowano kilka ogólnych technik w celu zmniejszenia wpływu konfliktów bankowych. Najbardziej oczywistą techniką jest buforowanie instrukcji (tak jak w przypadku realizacji poza kolejnością), zapewniając pewne statystyczne uśrednianie konfliktów bankowych. Możliwe jest także odczytanie argumentu rejestru, zanim instrukcja będzie gotowa do wykonania (np. Jeśli inny argument nie jest jeszcze gotowy lub zagrożenie strukturalne opóźnia wykonanie). Przypisywanie rejestrów do banków może wykorzystywać informacje o spodziewanym użyciu w celu zmniejszenia prawdopodobieństwa konfliktów. (Oprogramowanie może wspomagać preferencyjne używanie rejestrów w oczekiwany sposób.) Korzystając z wirtualnych nazw rejestrów fizycznych, można opóźnić przydzielanie nazw rejestrów fizycznych (a tym samym banków) do momentu zapisania wartości w rejestrze;

Ten rodzaj bankowości jest czasami nazywany pseudo-multiportowaniem, ponieważ zapewnia złudzenie większej liczby portów dostępu. Ta technika jest powszechnie stosowana w buforach, ponieważ struktura fizyczna jest często dzielona na osobne tablice pamięci z innych powodów.

(Jedną alternatywą dla takiej bankowości jest replikacja pliku rejestru. Użycie dwóch kopii pliku rejestru pozwala każdej z nich wymagać połowy liczby portów odczytu, chociaż wymagana jest taka sama liczba portów zapisu. Ta technika została zastosowana w POWER2 i Alpha 21264 i jest powszechnie stosowany w procesorach o wysokiej wydajności).

streszczenie

Pomocne może być rozróżnienie tych dwóch rodzajów bankowości jako bankowości czasowej, w której wybór banku jest rozłożony w czasie (podobnie jak bankowe rejestry ARM do szybkich przerwań) i bankowości przestrzennej, w której dostęp do banku może być równoczesny w czasie, ale jest rozłożony przestrzennie.

Bankowość czasowa jest zazwyczaj narażona na oprogramowanie i służy do zmniejszenia obciążenia (i złożoności) przerwań. (Pod względem koncepcyjnym przełączanie wątków w procesorze z włączonym zdarzeniem i wielowątkowym jest bardzo podobne do obsługi przerwań i może wykorzystywać podobne mechanizmy w celu zmniejszenia obciążenia).

Bankowość przestrzenna jest rzadziej częścią ISA (chociaż Itanium wymagał ładowania i przechowywania par rejestru zmiennoprzecinkowego, aby używać parzystych i nieparzystych liczb rejestrów - co nie jest gwarantowane z uwagi na rotację rejestrów - pozwalając na trywialny projekt dwóch banków, aby zapewnić dodatkowe wymagania dotyczące dostępu do pliku rejestru) i służy do obniżenia kosztów zapewnienia większej liczby dostępów do rejestru na cykl.

Paul A. Clayton
źródło