1 RISC – nasze założenia Podstawowe cechy: Wszystkie operacje są realizowane na rejestrach, Tylko operacje typu load i store wymagają dostępu do pamięci, Praktycznie jeden format instrukcji (wszystkie instrukcje maja taki sam rozmiar) Skoki realizowane są na podstawie warunków porównujących dane zawarte w rejestrach.
2 Cykl rozkazowy Każda instrukcja jest wykonywana w pięciu cyklach zegarowych 1. Pobranie instrukcji (IF) 2. Dekodowanie instrukcji (ID) 3. Wykonanie instrukcji/obliczenie adresu efektywnego (EX) 4. Zapis/odczyt do/z pamięci (MEM) 5. Akumulacja wyniku (WB)
3 Pięcio-krokowy pipeline Każdy cykl zegara staje się jednym krokiem pipeline Kroki mogą być wykonywane równolegle Mimo, że wykonanie instrukcji zabiera 5 cykli zegara, liczba CPI zmienia się z 5 na 1 Czy to jest takie proste ?
4 Realizacja Pipeline REG IM DM REG ALU REG IM DM REG ALU REG IM DM REG ALU REG IM DM REG ALU REG IM DM REG ALU Czas CC1 CC2 CC3 CC4 CC5 CC6 CC7 CC8 Instrukcje
5 Konflikty w przetwarzaniu pipeline Konflikt zasobów – występuje jeśli kilka instrukcji żąda tego samego zasobu Konflikt danych – występuje jeśli argument instrukcji jest wyliczany przez instrukcję bezpośrednio poprzedzającą Konflikt sterowania – występuje podczas wykonania instrukcji sterujących, np.: skoku warunkowego
6 Przykład konfliktu zasobów im regaludmreg im regaludmreg im regaludmreg im regaludmreg im regaludmreg Load Instr.1 Instr.2 Instr.3 Instr.4 mem Mem. access
7 Konflikt zasobów rozwiązanie InstrukcjaNumer cyklu zegarowego Load IFIDEX MEM WB Instr. 1 IFIDEX MEM WB Instr. 2 IFIDEX MEM WB Instr. 3 stallIFIDEX MEM WB Instr. 4 IFIDEX MEM WB Instr. 5 IFIDEX MEM
8 Przykład konfliktu danych im regaludmreg im regaludmreg im regaludmreg im regaludmreg im regaludmreg DADD R1,R2,R3 AND R6,R1,R7 OR R8,R1,R9 XOR R10,R1,R11 DSUB R4,R1,R5 DADD R1,R2,R3 DSUB R4,R1,R5 AND R6,R1,R7 OR R8,R1,R9 XOR R10,R1,R11
9 Konflikt danych rozwiązanie im regaludmreg im regaludmreg im regaludmreg im regaludmreg im regaludmreg AND R6,R1,R7 OR R8,R1,R9 XOR R10,R1,R11 DADD R1,R2,R3 DSUB R4,R1,R5 Problem rozwiązuje się poprzez zastosowanie dodatkowych połączeń (bypass)
10 Przykład przetwarzania pipeline Rozważmy problem mnożenia wektora przez skalar for (i = 1000; i > 0; i = i –1) x[i] = x[i] + s; Powyższy program może mieć następującą postać w języku asemblera Loop L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1) DADDUI R1,R1,#-8 BNE R1,R2,Loop
11 Wykonanie pętli Bez optymalizacji Z optymalizacją Loop L.D F0,0(R1) stall DADDUI R1,R1,#-8 ADD.D F4,F0,F2 ADD.D F4,F0,F2 stall stall stall BNE R1,R2,Loop S.D F4,0(R1) S.D F4,8(R1) DADDUI R1,R1,#-8 stall BNE R1,R2,Loop stall Przyjmijmy następujące czasy opóźnień: FP ALU op i inny FP ALU op – 3, FP ALU op i store double – 2, load double i FP ALU op – 1, load double i store double - 0
12 Rozwinięcie pętli i jej wykonanie Loop L.D F0,0(R1) loop L.D F0,0(R1) ADD.D F4,F0,F2 L.D F6,-8(R1) S.D F4,0(R1) L.D F10,-16(R1) L.D F6,-8(R1) L.D F14,-24(R1) ADD.D F8,F6,F2 ADD.D F4,F0,F2 S.D F8,-8(R1) ADD.D F8,F6,F2 L.D F10,-16(R1) ADD.D F12,F10,F2 ADD.D F12,F10,F2 ADD.D F16,F14,F2 S.D F12,-16(R1) S.D F4,0(R1) L.D F14,-24(R1) S.D F8,-8(R1) ADD.D F16,F14,F2 DADDUI R1,R1,#-32 S.D F16,-24(R1) S.D F12,16(R1) DADDUI R1,R1,#-32 BNE R1,R2,Loop BNE R1,R2,Loop S.D F16,8(R1) Czas wykonania wynosi teraz 14 cykli zegarowych
13 Optymalizacja wykonania pętli Loop L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1) DADDUI R1,R1,#-8; Usunięte BNE L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1) DADDUI R1,R1,#-8; Usunięte BNE L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1) DADDUI R1,R1,#-8 BNE R1,R2,Loop Zależność danych Może zostać usunięta poprzez wyliczenie pośrednich wartości R1, zmianę ofsetu w instrukcjach L.D oraz zmiejszeniu wartości R1 o 24
14 Optymalizacja wykonania pętli Loop L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1); Usunięte DADDUI & BNE L.D F0,-8(R1) ADD.D F4,F0,F2 S.D F4,-8(R1); Usunięte DADDUI & BNE L.D F0,-16(R1) ADD.D F4,F0,F2 S.D F4,-16(R1) DADDUI R1,R1,#-24 BNE R1,R2,Loop Zależność danych Zależność nazw Jeśli zmienimy nazwy rejestrów Pozostanie tylko zależność danych
15 Optymalizacja wykonania pętli Loop L.D F0,0(R1) ADD.D F4,F0,F2 S.D F4,0(R1); Usunięte DADDUI & BNE L.D F6,-8(R1) ADD.D F8,F6,F2 S.D F8,-8(R1); Usunięte DADDUI & BNE L.D F10,-16(R1) ADD.D F12,F10,F2 S.D F12,-16(R1) DADDUI R1,R1,#-24 BNE R1,R2,Loop