Meningkatkan Kinerja dengan Pipelining

advertisement
Meningkatkan Kinerja dengan Pipelining
• Topik hari ini:
Pipeline 5-tahap
Hazard dan penjadwalan instruksi
Prediksi branch
Eksekusi out-of-order
1
Prosesor Siklus Ganda
•Unit memori tunggal di-share oleh instruksi dan memori
•ALU tunggal juga digunakan untuk memperbaharui PC
•Register - register (latches) untuk menyimpan hasil setiap blok
2
Jalur Assembly
Tanpa Pipeline Mulai dan akhir pekerjaan sebelum ke selanjutnya
Pekerjaan
Waktu
A
B
A
C
B
A
C
B
A
C
B
Memecah pekerjaan ke dalam
tahapan yg lebih kecil
C
Dengan Pipeline
3
Peningkatan Kinerja?
•Apakah membutuhkan waktu yg lebih lama untuk menyelesaikan
masing - masing pekerjaan?
•Apakah lebih cepat menyelesaian pekerjaan secara serial?
•Asumsi apakah yang dibuat untuk menjawab pertanyaan pertanyaan diatas?
•Apakah pipeline 10 tahap lebih baik dari pipeline 5 tahap?
4
Efek Kuantitatif
•Dari hasil mem-pipeline:
Waktu dalam ns per instruksi meningkat
Setiap instruksi membutuhkan siklus yg lbh lama
Tapi ... rata-rata CPI tetap sama (kurang lebih)
Kecepatan clock meningkat
Waktu eksekusi total meningkat, menghasilkan rata - rata
waktu per instruksi yang lebih rendah
Pada kondisi ideal
= rasio dari waktu tempuh antara penyelesaian instruksi
yang berurutan
= jumlah tahap dari pipeline = peningkatan kec. clock
5
Sebuah pipeline 5 tahap
6
Sebuah Pipeline 5 Tahap
Menggunakan PC untuk mengakses I-cache dan menambah PC dengan 4
7
Sebuah Pipeline 5 Tahap
Membaca register, membandingkan register, menghitung target branch; utk sekarang
diasumsikan branch membutuhkan 2 siklus (banyak pekerjaan yang membuat branch
membutuhkan lebih dari itu)
8
Sebuah Pipeline 5 Tahap
Komputasi ALU, komputasi address efektif untuk load / store
9
Sebuah Pipeline 5 Tahap
Akses memori ke / dari data cache, store selesai dalam 4 siklus
10
Sebuah Pipeline 5 Tahap
Menuliskan hasil dari komputasi ALU atau load ke berkas register
11
Konflik / Permasalahan
•I-cache dan D-cache diakses pada siklus yang sama - akan
membantu apabila diimplementasikan terpisah
•Registers dimatikan dan ditulis dalam siklus yang sama mudah dihandle apabila register baca/tulis sama dengan
waktu siklus / 2 (yang lainnya, memakai bypassing)
•Target branch berubah hanya pada akhir dari tahap kedua
-- apa yang akan dikerjakan diantaranya?
•Data antar tahap di-latch ke register - register (overhead
yang meningkatkan latensi (kelambatan) per-instruksi
12
Hazards / Bahaya
•Hazard struktural: instruksi yang berbeda di tahap berbeda
(atau tahap yg sama) berkonflik di sumber daya yg sama
•Hazard data: sebuah instruksi tidak dapat berlanjut karena
membutuhkan sebuah nilai yang belum dihasilkan dari
instruksi sebelumnya
• Hazard kontrol: fetch tdk dapat berlanjut karena tidak tahu
keluaran dari branch sebelumnya - kasus khusus hazard
• data - kategori terpisah karena ditangani secara berbeda
13
Hazard Struktural
Contoh: sebuah gabungan instruksi dan data cache 
tahap 4 (MEM) dan tahap 1 (IF) tidak boleh bertabrakan
•
Instruksi yang kedua dan yg selanjutnya ditunda sampai
sebuah siklus dimana sumber dayanya bebas  ini adalah
balon (bubble) pipeline
•
Hazard struktural mudah untuk dihilangkan - meningkatkan
sumber daya (contohnya, implementasi cache instruksi dan
data).
•
14
Hazard Data
15
Bypassing
•Beberapa kemacetan (stall) dari hazard data dapat dihilangkan: bypassing 16
Kemacetan karena Hazard Data
17
Kemacetan karena Hazard Data
18
Contoh
add $1, $2, $3
lw
$4, 8($1)
19
Contoh
lw
$1, 8($2)
lw
$4, 8($1)
20
Contoh
lw
$1, 8($2)
sw
$1, 8($3)
21
Hazard Kontrol
•Teknik sederhana untuk menangani kemacetan karena
hazard kontrol:
untuk setiap branch, diperkenalkan sebuah siklus
stall (catatan: setiap instruksi ke-6 adalah branch!)
asumsi bahwa branch tidak diambil dan mulai fetch
instruksi selanjutnya - jika branch terjadi, perlu
perangkat keras utk membatalkan efek dari instruksi
di jalur yg salah
 fetch instruksi selanjutnya (slot dari branch delay)
dan tetap eksekusi - jika instruksi ternyata jalur yg
benar, pekerjaan yg berguna telah terjadi - jika
instruksi ternyata di jalur yg salah, diharapkan
kondisi program tidak hilang
22
Slot dari branch delay
23
Perlambatan Karena Stall / Kemacetan
Pipeline sempurna dengan tanpa hazard sebuah instruksi
selesai setiap siklus (siklus total ~ jumlah instruksi)
 peningkatan = penambahan kec. clock = jml tahap pipeline
•
•Dengan hazard dan stall, beberapa siklus (= waktu stall)
akan hilang dimana tidak ada instruksi yang selesai,
kemudian instruksi yg kena stall akan selesai
•Total siklus = jumlah instruksi + siklus yg stall
24
Pipeline tanpa Prediksi Branch
IF (br)
PC
Reg Read
Compare
Br-target
PC + 4
25
Pipeline dengan Prediksi Branch
IF (br)
PC
Branch
Predictor
Reg Read
Compare
Br-target
26
Prediksi Bimodal
14 bits
Branch PC
Table of
16K entries
of 2-bit
saturating
counters
27
Prediksi 2-Bit
•Utk setiap branch, memelihara conter 2-bit tersaturasi:
jika branch terjadi: counter = min(3,counter+1)
jika branch tdk terjadi: counter = max(0,counter-1)
… ada kemiripan dgn hal lainnya?
•Jika (counter >= 2), diprediksi terjadi branch, yg lain tdk
terjadi branch
•Counter berusaha menangkap kasus umum dari setiap
branch
28
Instruksi multi-siklus
•Multiple paralles pipelines - setiap pipeline dapat memiliki tahap
yg berbeda
•Instruksi sekarang dapat selesai dengan urutan yang sembarang harus memastikan untuk menulis ke register dengan urutan yg
benar
29
Implementasi dari Prosesor Urutan-Acak
Buffer Reorder (ROB)
Instr 1
Instr 2
Instr 3
Instr 4
Instr 5
Instr 6
Branch prediction
and instr fetch
R1  R1+R2
R2  R1+R3
BEQZ R2
R3  R1+R2
R1  R3+R2
Antrian Fetch Instruksi
Decode &
Rename
T1
T2
T3
T4
T5
T6
T1  R1+R2
T2  T1+R3
BEQZ T2
T4  T1+T2
T5  T4+T2
Register File
R1-R32
ALU
ALU
ALU
Hasil ditulis di
ROB dan tag-nya
di-broadcast ke IQ
Antrial Issue (IQ)
30
Download