Przemianowanie rejestrów
Przemianowanie rejestrów - technika w inżynierii komputerowej używana w celu uniknięcia niepotrzebnego szeregowego wykonania instrukcji narzuconego przez wykorzystanie tych samych rejestrów procesora przez następujące po sobie instrukcje.
Definicja problemu
[edytuj | edytuj kod]Prześledźmy poniższą sekwencję instrukcji:
- R1 = MEM[1024]
- R1 = R1 + 2
- MEM[1032] = R1
- R1 = MEM[2048]
- R1 = R1 + 4
- MEM[2056] = R1
Rozkazy 4, 5 oraz 6 są niezależne od rozkazów 1, 2 i 3, jednakże procesor nie może wykonać 4 dopóki rozkaz 3 nie zostanie zakończony.
Możemy usunąć to ograniczenie zmieniając nazwy rejestrów:
- 1. R1 = MEM[1024] 4. R2 = MEM[2048]
- 2. R1 = R1 + 2 5. R2 = R2 + 4
- 3. MEM[1032] = R1 6. MEM[2056] = R2
Teraz instrukcje 1, 2 i 3 mogą być wykonywane jednocześnie z instrukcjami 4, 5 oraz 6, a co za tym idzie przyspieszone może być przetwarzanie całej sekwencji.
Jeśli jest to możliwe przemianowanie rejestrów dokonuje się na etapie kompilacji, jednakże współczesne procesory zawierają więcej fizycznych rejestrów niż wynika to z architektury listy rozkazów (ang. ISA), więc przemianowanie rejestrów jest wykonywane sprzętowo aby uzyskać dalsze zrównoleglenie przetwarzania instrukcji.
Konflikty i przemianowanie rejestrów
[edytuj | edytuj kod]Kiedy więcej niż jedna instrukcja odwołuje się do określonego operandu w celu odczytu, bądź zapisu, wykonanie tych instrukcji w innej kolejności niż wynika to z oryginalnego porządku programu skutkuje konfliktem danych:
- Odczyt po zapisie (RAW)
- Instrukcja odczytująca zawartość rejestru musi wykonać się po instrukcji zapisującej występującej bezpośrednio przed nią w porządku programu, a nie po innej instrukcji zapisującej ten rejestr.
- Zapis po zapisie (WAW)
- Zawartość rejstru po sekwencji instrukcji piszących do niego musi wynikać z ostatniej instrukcji według porządku programu.
- Zapis po odczycie (WAR)
- Instrukcja zapisu nie może wykonać się po instrukcji odczytu z tego samego rejestru, gdyż spowoduje to odczytanie błędnej wartości.