Architektura procesora
Materiały

Treści tego modułu zawarte są w książce Randall Hyde "Profesjonalne Programowanie, część 1: Zrozumieć komputer" w rozdziałach:

Tutaj umieszczam tylko listę tematów, które poruszyłem na wykładzie:

Typy procesorów
Większość współczesnych procesorów można zaklasyfikować do jednej z trzech architektur:
Przykładowe współczesne procesory.
Logika przypadku a mikrokod

Logika przypadku

Mikro kod

Obecne procesory wykorzystują obie techniki!

Przykład instrukcji MOV

MOV DestReg, SrcReg

Kopiowanie wartości z rejestru SrcReg do rejestru DestReg.
  1. Pobranie kodu instrukcji z pamięci
  2. Aktualizacja rejestru EIP (wskaźnik następnej instrukcji)
  3. Dekodowanie kodu instrukcji
  4. Pobranie danych z rejestru SrcReg
  5. Zapis wartości w DestReg
Przykład instrukcji MOV

MOV [DestMem], SrcReg

Kopiowanie wartości z rejestru SrcReg do pamięci pod adres DestMem.
  1. Pobranie kodu instrukcji z pamięci
  2. Aktualizacja rejestru EIP
  3. Dekodowanie kodu instrukcji
  4. Pobranie adresu znajdującego się za kodem instrukcji
  5. Aktualizacja rejestru EIP
  6. Wyliczenie adresu efektywnego (zależy od trybu)
  7. Pobranie danych z rejestru SrcReg
  8. Zapis wartości w [DestMem]
Przykład instrukcji ADD

ADD DestReg, [Mem]

Dodawanie do wartości w rejestrze DestReg wartości z pamięci pod adresem Mem.
  1. Pobranie kodu instrukcji z pamięci
  2. Aktualizacja rejestru EIP
  3. Dekodowanie kodu instrukcji
  4. Pobranie adresu znajdującego się za kodem instrukcji
  5. Aktualizacja rejestru EIP
  6. Wyliczenie adresu efektywnego (zależy od trybu)
  7. Pobranie danej z [Mem] i przeslanie do ALU
  8. Przesłanie wartości z rejestru DestReg do ALU
  9. Nakazanie ALU dodanie wartości
  10. Zapis wartości w DestReg
  11. Aktualizacja rejestru flag
Równoległe wykonanie czynności

ADD DestReg, [Mem]

Dodawanie do wartości w rejestrze DestReg wartości z pamięci pod adresem Mem.
  1. Pobranie kodu instrukcji z pamięci
    • Aktualizacja rejestru EIP
    • Dekodowanie kodu instrukcji
  2. Pobranie adresu znajdującego się za kodem instrukcji
    • Aktualizacja rejestru EIP
    • Wyliczenie adresu efektywnego (zależy od trybu)
  3. Pobranie danej z [Mem] i przeslanie do ALU
  4. Przesłanie wartości z rejestru DestReg do ALU
  5. Nakazanie ALU dodanie wartości
    • Zapis wartości w DestReg
    • Aktualizacja rejestru flag

Niektóre kroki można wykonać jednocześnie.

Niestety większość kroków jest sekwencyjna.

Wydajność procesora

Wydajność procesora można mierzyć średnią liczbą instrukcji wykonywanych na jeden cykl zegara (IPC - Instructions Per Clockcycle)

Jeżeli instrukcje są wykonywane sekwencyjnie bardzo trudno jest uzyskać skalarność.

Potoki

Modelowy 5-stopniowy potok

  1. Pobranie instrukcji z pamięci – ang. instruction fetch (IF)
  2. Zdekodowanie instrukcji – ang. instruction decode (ID)
  3. Wykonanie instrukcji – ang. execute (EX)
  4. Dostęp do pamięci – ang. memory access (MEM)
  5. Zapisanie wyników działania instrukcji – ang. store; write back (WB)

Problemy związane z potokami
Komputery superskalarne

Wykorzystywane techniki:

  1. Zmiana kolejności wykonywania kodu.
  2. Zmiany nazw rejestrów
  3. Przewidywanie rozgałęzień, skoków.
  4. Powielenie jednostek wykonywania.

Przykładowy procesor AMD K8
Architektura VLIW

VLIW - Very Long Instruction Word

Jest to architektura, w której "instrukcje" VLIW są stałej długości i jest tak naprawdę zestawem kilku instrukcji.

___________________________________________
| INSTRUKCJA1 | INSTRUKCJA2 | INSTRUKCJA3 |
-------------------------------------------
To kompilator (programista) decyduje jakie instrukcje można spakować razem!
Procesor nie sprawdza ich niezależności.

Itanium2

To kompilator, a nie procesor, decyduje o:

Mimo dużego entuzjazmu testy nie potwierdziły dużego wzrostu wydajności.
W 2004 roku komputer z Itanium2 był na drugim miejscu na liście TOP500.

Kodowanie instrukcji 80x86

Przedrostek (0-4 bajtów) np. LOCK, REP, REPZ
Kod instrukcji (1-2) bajty
Bajt ModR/M - tryb adresowania, rejestry
Bajt SIB (opcjonalny) - skala, index, baza
Pole przesunięcia (opcjonalne) 0-4 bajtów
Dane stałe (immediate, opcjonalne) 0-4 bajtów

Kod instrukcji

Kodowanie instrukcji

Online assembler & disassembler

Online disassembler


Tomasz Kapela, Kraków 2011-2020