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 Prześledźmy poniższą sekwencję instrukcji: R1 = MEM R1 = R1 + 2 MEM = R1 R1 = MEM R1 = R1 + 4 MEM = 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 4. R2 = MEM 2. R1 = R1 + 2 5. R2 = R2 + 4 3. MEM = R1 6. MEM = 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 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.
Kategoria:Inżynieria oprogramowania