Co to jest wykonanie poza kolejnością?

Komputery to złożone maszyny, w których żadna część nie jest bardziej złożona niż procesor. Na podstawowym poziomie przeglądu wydaje się, że procesor powinien być stosunkowo prosty. Zajmuje serię poleceń, przetwarza je, a następnie wyprowadza dane. Nie przypomina to jednak rzeczywistego działania nowoczesnych procesorów.

Subskalarny do superskalarnego

Wczesne procesory były dokładnie takie, jak można się było spodziewać. Przyjmowali instrukcje indywidualnie, w kolejności, w jakiej je otrzymywali, przetwarzali je do końca, a następnie przechodzili do następnej instrukcji. Procesory tego typu były subskalarne, zdolne do wykonania mniej niż jednej instrukcji na cykl zegara. Projektanci procesorów stwierdzili, że wykonanie instrukcji składa się z wielu różnych etapów. Każdy z tych etapów wymagał innego sprzętu. Oznaczało to, że podczas wykonywania pojedynczej instrukcji przez całą sekwencję naraz niektóre części sprzętu pozostawały bezczynne. W każdym rodzaju procesora bezczynny sprzęt jest sprzętem bezużytecznym.

Aby wykorzystać ten bezczynny sprzęt, projekty procesorów zostały zaktualizowane w celu wykorzystania podejścia potokowego. To jeszcze bardziej oddzieliło sprzęt dla każdego etapu, ale pozwoliło na jednoczesne wykorzystanie ich wszystkich za pomocą serii instrukcji. Chociaż przejście każdej instrukcji przez potok wciąż zajmowało kilka cykli, ogólna przepustowość wynosiła jedną instrukcję na cykl. To sprawiło, że procesory były skalowalne.

Aby móc zrobić więcej, procesory musiały być superskalarne. Aby to osiągnąć, zaimplementowano wiele równoległych potoków.

Utrzymywanie potoków zasilanych danymi

Głównym problemem związanym z wydajnością komputerów jest zwykle opóźnienie pamięci. Wiele instrukcji działa na danych, więc dane muszą być dostępne, aby instrukcja mogła zostać wykonana. Pytanie brzmi: co zrobić, jeśli musisz poczekać na te dane, ponieważ nie są one natychmiast dostępne? Tradycyjnie odpowiedzią było po prostu zwlekanie i czekanie, aż stanie się dostępne. To pozostawia cały potok pusty, potencjalnie przez setki cykli procesora. Sytuacja pogarsza się jeszcze bardziej, gdy dwie instrukcje w równoległych potokach muszą czekać na pamięć, ponieważ pierwsza wstrzyma nawet żądanie danych drugiej. Chociaż pamięć podręczna procesora może pomóc rozwiązać ten problem, nadal nie może go naprawić. Aby go rozwiązać, potrzebny był nowy paradygmat. Tą zmianą paradygmatu było wykonanie poza kolejnością lub OOO.

Pierwszym etapem potoku jest zdekodowanie instrukcji. Oznacza to ustalenie, co należy zrobić, i sprawdzenie, czy dane potrzebne do operacji są dostępne. W procesorze OOO zdekodowane instrukcje są dodawane do kolejki. Są one usuwane z kolejki i faktycznie przetwarzane dopiero wtedy, gdy potrzebne im dane są dostępne. Krytycznie rzecz biorąc, nie ma znaczenia, w jakiej kolejności instrukcje zostały dodane do kolejki. Jeśli wczesna instrukcja oczekuje na dane, nowsza instrukcja może przejść do przodu, jeśli jest gotowa do użycia. Procesory OOO mogą zmieniać kolejność instrukcji, które mają przetwarzać, na podstawie kolejki nadchodzących instrukcji i tego, które z nich są gotowe do wykonania.

Zależności krytyczne

Ten proces zakłada dwie rzeczy. Przede wszystkim, że można wiarygodnie identyfikować i obsługiwać prawdziwe zależności. Po drugie, że możesz niezawodnie obsługiwać i identyfikować fałszywe zależności. Jaka jest różnica? Cóż, prawdziwa zależność to zależność, której w ogóle nie można złagodzić w systemie OOO. Najłatwiejszym przykładem jest odczyt po zapisie. Jeśli masz jedną instrukcję, która ma zapisywać pewne dane, a drugą, która ma następnie odczytać te dane, nie ma możliwości zmiany kolejności tych instrukcji. Należy je wypełnić w kolejności, w jakiej zostały przedstawione, w przeciwnym razie otrzymasz bzdurne dane.

Fałszywa zależność to taka, którą można ukryć za pomocą innej sprytnej sztuczki. Weźmy przykład zapisu po przeczytaniu. Na pierwszy rzut oka możesz pomyśleć, że nie możesz nadpisać danych przed ich przeczytaniem. Sprawy nie są jednak takie proste. Co jeśli masz inne miejsce, w którym możesz zapisać nowe dane, a następnie możesz po prostu zamienić nowe i stare dane po odczytaniu starych danych? Jest to proces zmiany nazwy rejestru i ma kluczowe znaczenie dla przetwarzania OOO.

Zazwyczaj zestaw instrukcji definiuje określoną liczbę rejestrów architektury, które są używane w systemie. Dosłownie nie możesz zwracać się do innych. Ale co, jeśli wykonasz rejestry nadmiarowe? Możesz je po prostu ukryć w większości, użyć ich do przechowywania danych, które nie powinny być jeszcze przetwarzane, a następnie po prostu zamienić etykiety rejestrów ukrytych i architektonicznych, gdy oś czasu znów będzie poprawna. W dowolnym momencie istnieje dokładnie odpowiednia liczba rejestrów architektonicznych, po prostu niekoniecznie zawsze znajdują się one w tym samym miejscu. Prawdziwą analogią byłoby „gorące biurko”.

Wniosek

Wykonywanie poza kolejnością to paradygmat przetwarzania, w którym instrukcje mogą być dynamicznie zmieniane w czasie wykonywania przez procesor. Odbywa się to na podstawie najwcześniej wydanych instrukcji, dla których dostępne są dane. Oznacza to, że instrukcje ładowane do potoku są zawsze gotowe do wykonania i nie ma opóźnień w oczekiwaniu na dane. Oczywiście kolejka jest na tyle długa, że ​​nie zapełnia się instrukcjami oczekującymi na dane, ale to już wyzwanie implementacyjne. Wykonanie OOO polega na zmianie nazwy rejestru w celu ukrycia fałszywych zależności. Nawet jeśli te instrukcje są faktycznie wykonywane poza kolejnością, nazwy rejestrów są zmieniane w taki sposób, aby ukryć ten fakt przed resztą komputera.



Jak sklonować dysk twardy

Jak sklonować dysk twardy

We współczesnej epoce cyfrowej, gdzie dane są cennym zasobem, klonowanie dysku twardego w systemie Windows może być dla wielu kluczowych procesów. Ten obszerny przewodnik

Jak naprawić błąd ładowania sterownika WUDFRd w systemie Windows 10?

Jak naprawić błąd ładowania sterownika WUDFRd w systemie Windows 10?

Czy podczas uruchamiania komputera pojawia się komunikat o błędzie informujący, że nie udało się załadować sterownika WUDFRd na Twój komputer?

Jak naprawić błąd NVIDIA GeForce Experience o kodzie 0x0003

Jak naprawić błąd NVIDIA GeForce Experience o kodzie 0x0003

Czy na pulpicie pojawia się błąd NVIDIA GeForce o kodzie 0x0003? Jeśli tak, przeczytaj blog, aby dowiedzieć się, jak szybko i łatwo naprawić ten błąd.

How to Use Auto Clicker for Chromebook

How to Use Auto Clicker for Chromebook

Today, were going to delve into a tool that can automate repetitive clicking tasks on your Chromebook: the Auto Clicker. This tool can save you time and

Jak usunąć procesor graficzny z komputera z systemem Windows w 2023 r

Jak usunąć procesor graficzny z komputera z systemem Windows w 2023 r

Czy musisz usunąć GPU z komputera? Dołącz do mnie, gdy wyjaśnię, jak usunąć procesor graficzny z komputera w tym przewodniku krok po kroku.

Jak zainstalować dysk SSD NVMe na komputerze stacjonarnym i laptopie

Jak zainstalować dysk SSD NVMe na komputerze stacjonarnym i laptopie

Kupiłeś nowy dysk SSD NVMe M.2, ale nie wiesz, jak go zainstalować? Czytaj dalej, aby dowiedzieć się, jak zainstalować dysk SSD NVMe na laptopie lub komputerze stacjonarnym.

Co to jest bomba logiczna?

Co to jest bomba logiczna?

Bomba logiczna to incydent związany z bezpieczeństwem, w którym osoba atakująca przeprowadza opóźnioną akcję. Czytaj dalej, aby dowiedzieć się więcej.

Co to jest SoC?

Co to jest SoC?

Jeśli kiedykolwiek zajrzałeś do wnętrza wieży PC, możesz zobaczyć, że jest tam wiele różnych komponentów. Twój przeciętny laptop zawiera większość tych samych komponentów

Co to jest szyfrowanie asymetryczne?

Co to jest szyfrowanie asymetryczne?

Algorytmy szyfrowania asymetrycznego wykorzystują dwa różne klucze. Jeden klucz służy do szyfrowania, a drugi do deszyfrowania.

Steam Deck: Jak sformatować kartę SD

Steam Deck: Jak sformatować kartę SD

Steam Deck jest dostępny w trzech opcjach przechowywania: 64 GB eMMC, 256 GB NVMe SSD i 512 GB NVMe SSD. W zależności od biblioteki gier i rozmiaru gier