Mikroarchitektura procesora

Mikroarchitektura – opis sprzętowej implementacji procesora definiujący jego działanie, używany w inżynierii komputerowej.

W środowisku naukowym częściej używany jest termin organizacja procesora. Wraz z modelem programowym procesora tworzy pojęcie architektury procesora.

Związek z listą rozkazów procesora

Mikroarchitektura, choć związana z pojęciem modelu programowego procesora (ang. Instruction Set Architecture — ISA) jest czymś zupełnie innym. O ile ISA nie zależy od organizacji procesora, to mikroarchitektura musi spełniać wymagania nałożone przez model programowy, na przykład zapewnić odpowiedni zasób rejestrów.

Mikroarchitektura zazwyczaj reprezentowana jest jako zbiór diagramów określających wybrane elementy procesora (bloki funkcjonalne, jednostki wykonawcze) oraz połączenia między nimi. Nie określa natomiast faktycznej implementacji obwodów logicznych.

Należy zaznaczyć, że:

  • Dwa procesory mogą mieć jednakową mikroarchitekturę (organizację), a jednocześnie zupełnie różną implementację fizyczną.[1]
  • Procesory o różnej organizacji mogą charakteryzować się jednakowym modelem programowym (ISA). Pozwala to na opracowywanie szybszych procesorów tej samej rodziny (wykonujących ten sam kod).

Aspekty mikroarchitektury

W związku z potrzebą przyspieszenia przetwarzania i ograniczeniami wynikającymi z istnienia najdłuższej ścieżki krytycznej w każdym układzie, stosuje się obecnie w procesorach przetwarzania potokowe. Pozwala to na jednoczesne wykonywanie kilku instrukcji, z których każda jest w danym momencie na innym etapie. Długość potoku wykonawczego mieści się zazwyczaj w granicach od 6 do 20 etapów. Projektowanie potoku jest jednym z głównych zagadnień mikroarchitektury.

Podobnie, jednostki wykonawcze są również zasadniczą częścią mikroarchitektury. Możemy do nich zaliczyć jednostki arytmetyczno-logiczne (ALU), jednostki zmiennoprzecinkowe (FPU), układy pobrań/zapisów (ang. load/store units), układ przewidywania rozgałęzień (BTB), czy jednostki SIMD. Wykonują one zasadnicze operacje każdego rozkazu. Wybór jednostek wykonawczych, dobór ich parametrów (opóźnienie (ang. latency), zużycie energii, możliwość pracy potokowej) jest ważnym zadaniem projektowania mikroarchitektury, podobnie jak dobór organizacji pamięci.

Poza wydajnością ważne z punktu widzenia mikroarchitektury jest wiele innych zagadnień. Między innymi są to:

  • rozmiar/koszt układu scalonego
  • zużycie energii
  • złożoność logiki
  • możliwość produkcji
  • łatwość debugowania
  • testowalność

Pojęcia związane z mikroarchitekturą

Uogólniając, można powiedzieć, że wszystkie procesory wykonują programy instrukcja po instrukcji, w następujących krokach:

  1. pobranie instrukcji
  2. dekodowanie instrukcji
  3. znalezienie danych potrzebnych do wykonania instrukcji
  4. wykonanie instrukcji
  5. zapis wyników

Poniżej opisano wybór technik poziomu mikroarchitektury stosowanych we współczesnych procesorach.

Wybór listy rozkazów

Wybór typu architektury listy rozkazów pomiędzy CISC, RISC, VLIW, EPIC w znacznej mierze implikuje mikroarchitekturę. Wybór architektury listy rozkazów, pomiędzy RISC a CISC z czasem przestaje mieć zasadnicze znaczenie z uwagi na to, że implementacja logiki dekodującej rozkazy ma ustaloną złożoność i obecnie nie stanowi dużego obciążenia w skali całego procesora.

Przetwarzanie potokowe

Podstawową techniką poziomu mikroarchitektury pozwalającą przyspieszyć przetwarzanie jest zastosowanie potoku wykonawczego. Podział wykonania pojedynczej instrukcji na etapy pozwala przyspieszyć taktowania procesora oraz zwiększyć efektywność wykorzystania logiki procesora.

Cache

Zastosowanie złożonej hierarchii pamięci podręcznych procesora (ang. cache) pozwala na zmniejszenie średniego czasu dostępu do pamięci i znaczne przyspieszenie przetwarzania.

Prognoza rozgałęzień

Rozkazy skoków powodują wystąpienie konfliktów sterowania co owocuje wstrzymaniem przetwarzania i spowolnieniem wykonania programu. Sposobem na złagodzenie tego efektu jest zastosowanie prognozowania rozgałęzień umożliwiającej spekulacyjne wykonanie kodu za instrukcją skoku. Niestety, w przypadku błędnej prognozy, koszt opróżnienia potoku i wznowienia przetwarzania w odpowiednim punkcie może być znaczny (kilka do kilkunastu cykli procesora).

Potok superskalarny

Wykorzystanie możliwości równoległego wykonania kilku instrukcji prowadzi do koncepcji potoku superskalarnego, w którym zdublowane lub zwielokrotnione są jednostki wykonawcze.

Niekolejne wykonanie instrukcji

Niekolejne wykonanie instrukcji (ang. Out-of-Order Execution) pozwala w jeszcze większym stopniu wykorzystać możliwość równoległego przetwarzania instrukcji w danym bloku podstawowym.

Wielowątkowość i zastosowanie wielu procesorów

Budowa procesorów wielordzeniowych (ang. Chip Multiprocessing - CMP) oraz wielowątkowych pozwala na zwiększenie ogólnej wydajności systemu poprzez umożliwienie jednoczesnego przetwarzania więcej niż jednego programu lub wątku. Pociąga to za sobą znaczną komplikację całego systemu oraz nie zwiększa wydajności aplikacji jednowątkowych.

Przypisy

  1. John L. Hennessy and David A. Patterson: Computer Architecture: A Quantitative Approach. Wyd. Third Edition. Morgan Kaufmann Publishers, Inc, 2003. ISBN 1-55860-596-7.