Pipelining
Tujuan pipelining adalah untuk meningkatkan kinerja komputer
dengan cara melakukan aktifitas pengerjaan instruksi secara paralel antara
instruksi satu dengan instruksi lainnya.
Dasarnya adalah adanya tahapan pada siklus instruksi yaitu
siklus fetch dan siklus execute.
Secara umum,
satu instruksi dapat didekomposisi menjadi:
1. Mengambil
instruksi (fetch instruction - FI)
2. Pemecahan
kode instruksi (fetch instruction - DI)
3. Kalkulasi
operand (calculate operand - CO)
4.
Pengambilan operand (feth operand - FO)
5. Eksekusi
instruksi (execute instruction - EI)
6. Tulis operand (write operand - WO)
Contoh pipeline instruksi untuk 9 instruksi
|
Waktu "
|
|||||||||||||
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
Instruksi 1
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
|
|
Instruksi 2
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
|
Instruksi 3
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
Instruksi 4
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
Instruksi 5
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
Instruksi 6
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
Instruksi 7
|
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
Instruksi 8
|
|
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
Instruksi 9
|
|
|
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
A !
5
B !
7
C !
8
D !
A+B
E !
C-B
F !
D+E
... dst.
Jumlah total waktu eksekusi dengan pipelining adalah:
Tk = ( k + (n-1) )
Tk = Total waktu eksekusi
k = jumlah langkah dalam pipeline instruksi
n = jumlah instruksi
Contoh:
Berapa total waktu eksekusi secara pipeline untuk 9
instruksi, di mana setiap instruksi didekomposisi menjadi 6 langkah.
Tk = ( k + n (n-1) )
= ( 6 + (9-1) )
= 6 + 8
= 14
Contoh pipelining untuk pencabangan bersyarat (dengan asumsi
ada 15 instruksi, di mana terdapat instruksi pencabangan bersyarat di instruki
ke-3 untuk mencabang ke instruksi 16).
|
Waktu "
|
|||||||||||||
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
Instruksi 1
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
|
|
Instruksi 2
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
|
Instruksi 3
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
|
|
|
|
|
Instruksi 4
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
|
|
|
|
|
|
|
Instruksi 5
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
|
|
|
|
|
|
|
Instruksi 6
|
|
|
|
|
|
FI
1
|
DI
1
|
|
|
|
|
|
|
|
Instruksi 7
|
|
|
|
|
|
|
FI
1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Instruksi 15
|
|
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
|
Instruksi 16
|
|
|
|
|
|
|
|
|
FI
1
|
DI
1
|
CO
1
|
FO
1
|
EI
1
|
WO
1
|
A !
5
B !
6
if A x B
> 7 then
.. .. ..
endif
Berhadapan dengan
Percabangan
Salah satu masalah utama dalam perancangan pipeline
instruksi adalah meyakinkan aliran stasioner instruksi ke langkah awal
pipeline.
Hambatan utama, seperti yang telah kita lihat adalah
pencabangan bersyarat sampai instruksi benar-benar dieksekusi, mustahil kita
menentukan apakah pencabangan itu diambil atau tidak.
Pendekatan
yang diambil untuk berhadapan dengan pencabangan bersyarat:
- Multiple
stream (berbagai macam arus)
- Prefetch
branch target (target pencabangan prefetch)
- Loop
buffer (buffer pengulangan)
- Branch
prediction (prediksi pencabangan)
- Delayed branch (pencabangan tertunda)
Multiple Stream
Sebuah pipeline sederhana mengalami sanksi untuk instruksi
pencabangan karena pipeline harus memilih salah satu instruksi untuk pengambilan
instruksi berikutnya dan dapat membuat pilihan yang salah.
Sebuah
pendekatan kekuatan fisik untuk mereplikasi pembagian awal pipeline untuk
pengambilan kedua instruksi dengan menggunakan 2 arus. Namun cara ini terdapat
2 permasalahan:
- Dengan berbagai pipeline terdapat penundaan
argumen untuk akses ke register dan ke memory
- Instruksi pencabangan tambahan dapat masuk
ke pipeline (salah satu arus) sebelum keputusan pencabangan asli dipecahkan.
0 komentar:
Posting Komentar