W inżynierii komputerowej mikroarchitektura (czasami oznaczana skrótem µarch lub uarch) jest opisem obwodu elektrycznego komputera, jednostki centralnej lub cyfrowego procesora sygnałowego, który jest wystarczający do pełnego opisu działania sprzętu.

Naukowcy używają terminu "organizacja komputera", natomiast ludzie z branży komputerowej częściej mówią "mikroarchitektura". Mikroarchitektura i architektura zestawu instrukcji (ISA) stanowią razem dziedzinę architektury komputerowej.

Co obejmuje mikroarchitektura?

Mikroarchitektura opisuje wewnętrzną budowę i sposób działania procesora na poziomie implementacji. Obejmuje zarówno elementy sprzętowe, jak i mechanizmy sterujące, które razem realizują instrukcje zdefiniowane przez ISA. Najważniejsze składniki mikroarchitektury to m.in.:

  • Rejestry — małe, szybkie miejsca przechowywania wewnątrz procesora.
  • Jednostka arytmetyczno‑logiczna (ALU) — wykonuje operacje arytmetyczne i logiczne.
  • Jednostki wykonawcze — różne bloki odpowiedzialne za całkowite, zmiennoprzecinkowe, wektorowe lub specjalne operacje.
  • Jednostka sterująca — zarządza przepływem instrukcji i danymi, może być oparta na mikroprogramie (microcode) lub być sprzętowo zdefiniowana.
  • Potok (pipeline) — podział przetwarzania instrukcji na fazy (pobranie, dekodowanie, wykonanie, dostęp do pamięci, zapis wyniku) umożliwiający równoległą pracę wielu instrukcji.
  • Pamięć podręczna (cache) — warstwy szybkiej pamięci między procesorem a pamięcią główną, istotne dla wydajności.
  • Mechanizmy przewidywania skoków (branch prediction) — zmniejszają koszty błędnych skoków w potoku.
  • Zarządzanie pamięcią — jednostki translacji adresów (MMU), buforowanie i protokoły spójności w wielordzeniowych systemach.
  • Schematy równoległości — superskalarność, wielordzeniowość, SMT/Hyper‑Threading, wykonanie poza kolejnością (out‑of‑order).

Główne zasady działania

Mikroarchitektura realizuje instrukcje ISA przez sekwencję działań skoordynowanych pomiędzy opisanymi komponentami. Kilka kluczowych zasad to:

  • Dzielenie na etapy (pipelining) — każda instrukcja przechodzi kolejne etapy, a różne instrukcje wykonywane są równocześnie w różnych etapach, co zwiększa przepustowość.
  • Równoległe jednostki wykonawcze — wiele instrukcji może być jednocześnie wykonywanych przez różne jednostki, co wymaga mechanizmów harmonizacji wyników.
  • Wykonywanie poza kolejnością — procesor może wykonywać dostępne instrukcje niezależnie od ich oryginalnej kolejności w programie, by lepiej wykorzystać zasoby; konieczne są wtedy mechanizmy przywracania porządku i obsługi wyjątków.
  • Przewidywanie i spekulacja — procesor przewiduje wyniki skoków lub warunków i spekuluje wykonanie instrukcji, a w razie błędu wycofuje efekty.
  • Hierarchia pamięci — dąży się do minimalizacji opóźnień przez lokalizowanie danych bliżej wykonawczych jednostek (rejestry → cache → pamięć główna → pamięć masowa).
  • Minimalizacja zależności — techniki, takie jak renaming rejestrów czy kolejki ładowań/zapisań, redukują konflikty między instrukcjami.

Rodzaje implementacji

Mikroarchitektury można realizować na różne sposoby:

  • Sprzętowo sterowane (hardwired) — logika sterująca jest zrealizowana bezpośrednio układami cyfrowymi, co daje szybkie działanie.
  • Mikrokodowane — złożone instrukcje są realizowane przez sekwencje krótszych mikroinstrukcji zapisanych w pamięci mikroprogramu; łatwiejsze do modyfikacji, ale mogą być wolniejsze.
  • RISC vs CISC — style projektowe: RISC (proste, krótkie instrukcje, duży nacisk na potok) i CISC (bogatszy zestaw instrukcji, często realizowany mikrokodowo). W praktyce współczesne procesory łączą cechy obu podejść.

Wyzwania i kompromisy projektowe

Projektowanie mikroarchitektury to ciąg kompromisów:

  • Wydajność vs złożoność — zaawansowane techniki (OOO, predykcja gałęzi) zwiększają wydajność, ale komplikują projekt i weryfikację.
  • Wydajność vs zużycie energii — wyższa częstotliwość i większa równoległość rosną kosztem poboru mocy i emisji ciepła.
  • Koszt produkcji vs funkcjonalność — dodawanie jednostek wykonawczych, większych cache'ów i złożonych mechanizmów kontroli zwiększa koszt chipu.
  • Bezpieczeństwo — techniki spekulacyjne i współdzielenie zasobów mogą ujawnić dane (przykłady: Spectre, Meltdown), co wymaga poprawek w mikroarchitekturze i oprogramowaniu.

Narzędzia i walidacja

Projekt mikroarchitektury wymaga symulacji, emulacji i intensywnych testów. Inżynierowie używają:

  • symulatorów cyklicznych (cycle‑accurate) do analizy wydajności,
  • narzędzi do formalnej weryfikacji poprawności,
  • FPGA do prototypowania,
  • benchmarków i profilerów do oceny rzeczywistego zachowania w systemie.

Przykłady i zastosowania

Mikroarchitektura jest kluczowa w procesorach ogólnego przeznaczenia (np. serwery, komputery osobiste, urządzenia mobilne), w układach do przetwarzania sygnałów, w mikrokontrolerach i w jednostkach specjalizowanych (GPU, NPU). Różne rodziny procesorów (np. x86, ARM) dzielą ISA, lecz mogą mieć bardzo różne mikroarchitektury — od prostych, energooszczędnych rdzeni po bardzo złożone, wielordzeniowe układy serwerowe.

Podsumowanie

Mikroarchitektura to szczegółowy opis wewnętrznej organizacji procesora, opisujący jak sprzęt realizuje instrukcje z ISA. To pole łączące elektronikę, projektowanie układów cyfrowych i optymalizację wydajności oraz zużycia energii. Rozumienie mikroarchitektury pomaga wyjaśnić, dlaczego różne procesory o tej samej architekturze zestawu instrukcji mogą mieć odmienną wydajność, efektywność energetyczną i koszty.