Mikroarchitektura procesora

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Mikroarchitektura - w inżynierii komputerowej, jest opisem sprzętowej implementacji procesora definiującym jego działanie.

W środowisku naukowym częściej używany jest termin organizacja procesora. Wraz z listą rozkazów procesora mikroarchitektura tworzy pojęcie architektura procesora.

Związek z listą rozkazów procesora[edytuj | edytuj kod]

Mikroarchitektura, choć związana z pojęciem architektury listy rozkazów (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 listę rozkazów, 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ę jednakową listą rozkazów (ISA). Pozwala to na opracowywanie szybszych procesorów tej samej rodziny (wykonujących ten sam kod).

Aspekty mikroarchitektury[edytuj | edytuj kod]

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ą[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

 Osobny artykuł: Pamięć podręczna procesora.

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ń[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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[edytuj | edytuj kod]

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 1558605967.