Anda di halaman 1dari 18

Instruksi Pipelining

adalah teknik yang menerapkan suatu bentuk parallelism yag disebut instruksilevel
parallelism dalam
satu
prosesor. Oleh
karena
itu
memungkinkan
CPU throughput yang lebih cepat (jumlah instruksi yang dapat dieksekusi dalam unit
waktu) daripada yang akan diberikan pada clockrate. Dasar siklus instruksi ini
dipecah menjadi serangkaian disebut pipeline. Daripada memproses setiap instruksi
secara berurutan (menyelesaikan satu instruksi sebelum memulai berikutnya),
setiap instruksi dibagi menjadi urutan langkah-langkah langkah yang berbeda dapat
dieksekusi secara paralel dan instruksi dapat diproses secara bersamaan (mulai
satu instruksi sebelum menyelesaikan sebelumnya) .
Pipelining meningkatkan instruksi throughput dengan melakukan beberapa operasi
pada saat yang sama, namun tidak mengurangi instruksi latency, yang merupakan
waktu untuk menyelesaikan sebuah instruksi dari awal sampai akhir, karena masih
harus melalui semua langkah. Memang,semua itu dapat meningkatkan latency
karena overhead tambahan dari perhitungan menjadi langkah-langkah yang
terpisah dan menjadi lebih buruk, pipeline lebih meningkatkan latency. Dengan
demikian, pipelining meningkatkan throughput yang merupakan biaya latency, dan
sering digunakan dalam CPU tapi dihindari dalam sistem real-time, di mana latency
merupakan kendala yang sulit.
Setiap instruksi dibagi menjadi urutan langkah-langkah tergantung. Langkah
pertama adalah selalu mengambil instruksi dari memori; langkah terakhir biasanya
menulis hasil instruksi untuk register prosesor atau memori. Pipelining berusaha
untuk membiarkan pekerjaan prosesor untiuk memberika banyak petunjuk karena
ada langkah-langkah yang bergantung, hanya digunakan sebagai jalur perakitan
untuk membangun banyak instruksi sekaligus, daripada menunggu sampai satu
instruksi telah melewati garis sebelum mengakui yang berikutnya. Sama seperti
tujuan dari jalur perakitan adalah untuk menjaga setiap assembler produktif
sepanjang waktu, pipelining berusaha untuk menjaga setiap bagian dari prosesor
yang sibuk dengan beberapa instruksi. Pipelining memungkinkan waktu siklus
komputer menjadi cepat disaat langkah intruksi menjadi paling lambat sekalipun,
dan idealnya memungkinkan satu instruksi lengkap dalam setiap siklus.

Pengantar.
Central processing unit (CPU) yang didorong oleh sebuah clock.. Setiap pulsa clock
tidak perlu melakukan hal yang sama, logika dalam CPU mengarahkan pulsa secara
berturut-turut ke berbagai tempat untuk melakukan urutan yang berguna. Ada
banyak alasan bahwa seluruh pelaksanaan instruksi mesin tidak dapat terjadi
sekaligus di pipelining, efek yang tidak dapat terjadi pada saat yang sama dibuat
menjadi langkah tergantung dari instruksi.
1

Misalnya, jika salah satu pulsa clock kait nilai ke register atau dimulai perhitungan,
itu akan memakan waktu untuk nilai stabil pada output dari register atau
perhitungan untuk menyelesaikan. Sebagai contoh lain, membaca instruksi dari unit
memori tidak dapat dilakukan pada saat yang sama bahwa instruksi menulis
hasilnya ke unit memori yang sama.

Sejumlah Tahapan Pipeline


Jumlah langkah tergantung bervariasi dengan arsitektur mesin. Sebagai contoh:

IBM Stretch adalah proyek yang mengusulkan istilah Fetch, Decode, dan
Execute yang telah menjadi istilah pada umumnya .

Klasik Risch Pipeline terdiri dari:


1. Instruction Fetch
2. Decode instruksi dan Register Fetch
3. Execute
4. Akses memori
5. Register Write Back

The Atmel AVR dan PIC mikrokontroler masing-masing memiliki pipeline dua
tahap.

Banyak desain yang menggunakan pipeline 7, 10 dan bahkan 20 tahapan


(seperti pada Intel Pentium 4).

"Prescott" dan "Cedar Mill" Netburst core dari Intel, yang digunakan dalam
Pentium 4 terbaru model dan mereka Pentium D dan Xeon derivatif, memiliki
pipeline yang panjangnya 31 tahapan .

The Xelerated X10q Jaringan Processor ini memiliki pipeline lebih dari seribu
tahapan. [1]

Pipeline dibuat "lebih dalam" (tergantung dengan lebih banyak langkah ), langkah
yang diberikan dapat diimplementasikan dengan sirkuit sederhana, yang dapat
membiarkan clock prosesor berjalan lebih cepat. [2] pipeline tersebut dapat
disebut superpipelines. [3]
Sebuah prosesor dikatakan sepenuhnya pipelined jika dapat mengambil sebuah
instruksi pada setiap siklus. Dengan demikian, jika beberapa petunjuk atau kondisi
mengharuskan penundaan yang menghambat mengambil instruksi baru, prosesor
tidak sepenuhnya pipelined.
2

Hazard
Model eksekusi sekuensial mengasumsikan bahwa setiap instruksi selesai sebelum
yang berikutnya dimulai; asumsi ini tidak benar pada prosesor pipelined. Sebuah
situasi
di
mana
hasil
yang
diharapkan
bermasalah
dikenal
sebagai hazard. Bayangkan dua instruksi daftar berikut untuk prosesor RISC :
1: add 1 ke R5
2: copy R5 ke R6
Jika prosesor memiliki 5 langkah yang tercantum dalam ilustrasi awal, instruksi 1
akan diambil pada waktu t 1 dan pelaksanaannya akan lengkap pada t 5. Instruksi 2
akan diambil pada t 2 dan akan lengkap di t 6. Instruksi pertama akan menyetorkan
sehingga jumlah bertambah menjadi R5 sebagai langkah kelima (Register Write
Back) pada t 5. Tetapi instruksi kedua kemungkinan mendapatkan nomor dari R5
(copy ke R6) di langkah kedua (decode instruksi dan Register Fetch) pada waktu
t 3. Tampaknya instruksi pertama tidak akan bertambah nilainya pada saat
itu. Sehingga akan menyebabkan hazard.
Menulis program komputer dalam bahasa program yang dijalankan compiler
mungkin tidak menimbulkan kekhawatiran ini, karena compiler dapat dirancang
untuk menghasilkan kode mesin yang menghindari hazard.
WorkAround
Dalam beberapa DSP dan RISC prosesor awal, dokumentasi menyarankan
programmer untuk menghindari ketergantungan seperti petunjuk instruksi yang
berdekatan dan hampir berdekatan (disebut slot delay), atau menyatakan bahwa
instruksi kedua menggunakan nilai lama daripada nilai yang diinginkan (dalam
contoh di atas, prosesor akan melakukan counter-intuitif lalu menyalin nilai
unincremented), atau menyatakan bahwa nilai yang digunakan tidak
terdefinisi. Programmer mungkin mempunyai pekerjaan yang lain dan tidak berelasi
sehingga prosesor dapat melakukan pekerjaan secara bersamaan, untuk
memastikan hasil yang benar, programmer dapat menyisipkan NOP ke dalam kode,
untuk meniadakan keuntungan dari pipelining.

Solusi
Prosesor pipelined biasanya menggunakan tiga teknik untuk bekerja seperti yang
diharapkan ketika programmer berasumsi bahwa setiap instruksi selesai sebelum
yang berikutnya dimulai:

Prosesor yang dapat menghitung kehadiran hazard ataupun stall, untuk


menunda pemrosesan instruksi kedua (dan instruksi berikutnya) sampai nilainilai
itu
diperlukan
da
disiapkan
sebagai
masukan. Hal
ini
menciptakan bubble di
dalam
pipeline, juga
sebagian
meniadakan
keuntungan dari pipelining.

Beberapa prosesor tidak hanya dapat menghitung kehadiran hazard tetapi


dapat mengkompensasi dengan memiliki jalur data tambahan yang
memberikan masukan yang diperlukan untuk langkah perhitungan sebelum
instruksi berikutnya jika tidak akan dihitung oleh prosesor tersebut , sehingga
menjadi atribut yang disebut operan forwarding. [4] [5]

Beberapa prosesor dapat menentukan bahwa instruksi lain berikut yang


sekuensial tidak tergantung pada satu intruksi atau instruksi yang dijalankan
saat ini dan dapat dijalankan tanpa hazard. Prosesor tersebut dapat
melakukan out-of-order eksekusi.

Branches
Sebuah branch dari urutan instruksi yang normal sering melibatkan hazard. Kecuali
prosesor dapat memberikan efek branch dalam siklus waktu tunggal, pipeline akan
terus mengambil instruksi secara berurutan. Instruksi tersebut tidak bisa dibiarkan
berlaku karena programmer telah dialihkan untuk mengontrol ke bagian lain dari
program.
Sebuah branch bersyarat bahkan lebih bermasalah. Prosesor ataupun branch,
tergantung pada perhitungan yang belum terjadi. Berbagai prosesor mungkin stall,
mencoba prediksi branch, dan mungkin dapat mulai mengeksekusi dua sekuens
program yang berbeda , baik dengan asumsi branch ini ataupun tidak, dengan
membuang semua pekerjaan yang berhubungan dengan menebak pekerjaan
instruksi yang salah.
Sebuah prosesor dengan pelaksanaan prediksi branch yang membuat prediksi yang
benar dapat meminimalkan kinerja dari perbranchan. Namun, jika branch
diperkirakan kurang, akan lebih baik menciptakan lebih banyak pekerjaan untuk
prosesor, seperti flushing from the pipeline jalur kode yang salah dan sudah mulai
dieksekusi sebelum melanjutkan eksekusi pada lokasi yang benar.
Program yang ditulis didalam prosesor pipelined dibuat untuk menghindari branch
dan untuk meminimalkan kemungkinan kehilangan kecepatan.Sebagai contoh,
programmer dapat menangani kasus biasa dengan eksekusi sekuensial dan branch
hanya pada mendeteksi kasus yang tidak biasa. Menggunakan program
seperti gcov untuk
menganalisis kode
cakupan memungkinkan
programmer
mengukur seberapa sering branch tertentu yang benar-benar dijalankan dan
4

mendapatkan instruksi yang dapat digunakan untuk mengoptimalkan kode program


tersebut.

Situasi Khusus

Program self-modification

Teknik Program Self-Modification


dapat menjadi masalah pada prosesor
pipelined. Dalam teknik ini, salah satu efek dari sebuah program adalah untuk
memodifikasi
instruksi
yang
akan
datang
sendiri. Jika
prosesor
memiliki cacheinstruksi, instruksi asli mungkin sudah disalin ke dalam antrian
masukan prefetch dan modifikasi tidak akan berlaku.

Instruction Uninterruptible

Instruksi mungkin tidak akan pernah terputus untuk memastikan , seperti ketika
swap dua item. Mengizinkan sebuah prosesor secara berurutan untuk
menyela antara instruksi, tetapi prosesor pipelining akan penuh dengan instruksi
yang tumpang tindih, sehingga eksekusi instruksi yang tidak terputus membuat
bagian-bagian dari instruksi biasa menjadi Uniterruptible.

Pipeline independen

Matematika pipeline , seperti prosesor aritmatika dalam produk Intel Pentium,


proses array besar atau vektor dengan mengulangi proses seperti perkalian ribuan
kali. Prosesor Video juga melakukan banyak perhitungan secara paralel dengan
pelaksanaan instruksi prosesor. Situasi ini tidak inheren menimbulkan hazard
terhadap pelaksanaan instruksi. Namun, setelah memulai operasi, programmer
harus mempertimbangkan atau menguji apakah operasi telah selesai sebelum
memulai operasi lain yang tergantung pada hasil yang pertama, atau prosesor
harus dirancang untuk mendeteksi dan stall yang bergantung pada operasi sampai
input telah disiapkan.

Pertimbangan Desain

Kecepatan
Pipelining menyimpan semua bagian dari prosesor yang diduduki dan meningkatkan
jumlah pekerjaan yang berguna prosesor dapat melakukan instruksi dalam waktu
tertentu. Pipelining biasanya mengurangi waktu siklus prosesor dan meningkatkan
throughput instruksi. Kecepatan keuntungan berkurang sejauh eksekusi yang
bertemu hazard yang memerlukan eksekusi untuk memperlambat tingkat bawah
yang ideal.Sebuah prosesor non-pipelined mengeksekusi hanya satu instruksi pada
satu waktu. Awal instruksi berikutnya tertunda tidak didasarkan pada hazard dan
tanpa syarat.
Kebutuhan Sebuah prosesor pipelined untuk mengatur semua pekerjaan ke dalam
langkah-langkah modular mungkin memerlukan duplikasi register yang
meningkatkan latency dari beberapa instruksi.
Ekonomi
Dengan membuat setiap langkah yang sederhana, pipelining dapat mengaktifkan
operasi kompleks lebih ekonomis daripada menambahkan sirkuit yang kompleks,
seperti untuk perhitungan numerik. Namun, untuk prosesor yang mengutamakan
peningkatan kecepatan dengan pipelining mungkin akan menjadi lebih sederhana
dan lebih murah untuk diproduksi.
Prediktabilitas
Dibandingkan dengan lingkungan di mana pemrogram perlu untuk menghindari
atau mengatasi hazard, penggunaan prosesor non-pipelined mungkin membuatnya
lebih mudah untuk program dan untuk melatih programmer. Prosesor non-pipelined
juga dibuat untuk prosesor lebih mudah memprediksi waktu yang tepat dari urutan
yang diberikan instruksi.

GENERIC PIPELINE
Dibawah ini generic pipeline dibagi 4 stage
1.

Fetch

2.

Decode

3.

Execute

4.

Write Back

Kotak abu-abu atas adalah daftar instruksi yang menunggu untuk dieksekusi;kotak
abu-abu bawah adalah daftar instruksi yang telah selesai; dan kotak putih tengah
adalah pipeline.
Waktu Eksekusi
0
1

Empat instruksi yang menunggu untuk dieksekusi

Instruksi hijau diambil dari memori

Instruksi hijau diterjemahkan

Instruksi ungu diambil dari memori

Instruksi hijau dijalankan (operasi yang sebenarnya dilakukan)

Instruksi ungu diterjemahkan

Instruksi biru diambil

Hasil hijau instruksi yang ditulis kembali ke file register atau


memori

Instruksi ungu dieksekusi

Instruksi biru diterjemahkan

8
9

Instruksi merah diambil

Instruksi hijau selesai

Instruksi ungu ditulis kembali

Instruksi biru dieksekusi

Instruksi merah diterjemahkan

Instruksi ungu selesai

Instruksi biru ditulis kembali

Instruksi merah dieksekusi

Instruksi biru selesai

Instruksi merah ditulis kembali

Instruksi merah selesai

Semua empat instruksi dieksekusi

Bubble

Ketika (gangguan) dalam pelaksanaan terjadi, "bubble" yang dibuat di pipeline di


mana yang tidak digunakan akan terjadi. Dalam siklus 2, mengambil dari instruksi
8

ungu tertunda dan tahap decoding dalam siklus 3 sekarang berisi


bubble. Semuanya balik instruksi ungu tertunda juga tapi segala sesuatu di depan
instruksi ungu berlanjut dengan eksekusi.
Jelas, bila dibandingkan dengan pelaksanaan di atas, bubble menghasilkan total
waktu eksekusi dari 8 clock bukannya 7.
Bubble seperti warung (penundaan), di mana tidak ada yang berguna akan terjadi
untuk
mengambil,
decode,
mengeksekusi
dan
writeback. Hal
ini
sepertiNOP (kependekan ada operasi) kode.

Contoh 1
Sebuah instruksi khas untuk menambahkan dua nomor mungkin ADD A, B, C yang
menambahkan nilai-nilai yang ditemukan di lokasi memori A dan B, dan kemudian
menempatkan hasilnya dalam lokasi memori C. Dalam prosesor pipelined
yang pipeline kontroler akan merusak ini menjadi serangkaian tugas yang mirip
dengan:
LOAD A, R1
LOAD B, R2
ADD R1, R2, R3
STORE R3, C
LOAD instruksi berikutnya
Lokasi 'R1' dan 'R2' adalah register dalam CPU. Nilai-nilai yang tersimpan dalam
memori lokasi berlabel 'A' dan 'B' yang dimuat (disalin) ke register ini, lalu
menambahkan, dan hasilnya disimpan dalam lokasi memori berlabel 'C'.
Dalam contoh ini pipeline adalah tiga tahap panjang Load, mengeksekusi, dan
menyimpan. Setiap langkah-langkah yang disebut tahap pipeline.
Pada prosesor non-pipelined, hanya satu tahap dapat bekerja pada suatu waktu
sehingga seluruh instruksi yang lengkap sebelum instruksi berikutnya dapat
dimulai. Pada prosesor pipelined, semua tahapan dapat bekerja sekaligus pada
instruksi yang berbeda. Jadi, ketika instruksi ini di jalankan tahap, instruksi kedua
akan berada di tahap decode dan instruksi 3 akan diambil.
Contoh 2
Untuk lebih memahami konsep ini, kita dapat melihat pipeline 3-tahap teoritis:

Tahap

Deskripsi

Load

Baca instruksi dari memori

Execute

Mengeksekusi instruksi

Store

Hasil Store di memori dan / atau register

dan pseudo-kode assembly listing yang akan dijalankan:


LOAD # 40, A; Load 40 A
MOVE A, B; salin A pada B
ADD # 20, B; menambahkan 20 ke B
STORE B, 0x300; Store B ke dalam sel memori 0x300
Dibawah Ini adalah bagaimana hal itu akan dieksekusi:
Clock1
Load

Execute

Store

LOAD
Instruksi LOAD diambil dari memori.
Clock2
Load
MOVE

Execute

Store
LOAD

Instruksi LOAD dieksekusi, sedangkan instruksi MOVE diambil dari memori.


Clock3
10

Load

Execute

Store

ADD

MOVE

LOAD

Instruksi LOAD dalam tahap Store, di mana hasilnya (jumlah 40) akan disimpan
dalam register A. Sementara itu, instruksi MOVE sedang dieksekusi. Karena harus
memindahkan isi dari A ke B, harus menunggu akhir dari instruksi LOAD.
Clock 4

Load

Execute

Store

STORE

ADD

MOVE

Instruksi STORE adalah dimuat, sedangkan instruksi MOVE adalah finishing off dan
ADD adalah menghitung.
Dan sebagainya. Perhatikan bahwa, kadang-kadang, suatu instruksi akan
tergantung pada hasil yang lain (seperti contoh MOVE kami). Bila lebih dari satu
instruksi referensi lokasi tertentu untuk operand, baik membacanya (sebagai
masukan) atau menulis itu (sebagai output), melaksanakan instruksi tersebut dalam
urutan yang berbeda dari program yang asli agar dapat mengakibatkan
situasi hazard (disebutkan di atas).
Tahapan Pipeline
-

Mengambil instruksi dan membufferkannya


Ketika tahapan yang kedua bebas, tahapan pertama mengirimkan instruksi
yag di bufferkan tersebut.
Pada saat tahapan kedua sedang mengeksekusi, tahapan pertama
memanfaatkan siklus memory yang tidak dipakai untuk mengambil dan
membufferkan instruksi berikutnya.

11

Karena untuk setiap tahap pengerjaan instruksi, komponen yang bekerja berbeda
maka dimungkinkan untuk mengisi kekosongan pada komponen tersebut. Sebagai
contoh:
Intruksi 1: ADD AX AX
Intruksi 2: ADD EX CX
Setelah CU menjemput Instruksi 1 dari memory (IF), CU akan menerjemahkan
instruksi tersebut (ID). Pada saat menterjemahkan instruksi 1 tersebut, komponen IF
tidak bekerja. Adanya teknologi pipeline menyebabkan IF akan menjemput Instruksi
2 pada saat ID menterjemahkan Instruksi 1. Demikian seterusnya pada saat CU

12

menjalankan

instruksi

(EX),

instruksi

diterjemahkan

(ID).

Dengan adanya pipeline, dua instruksi selesai dilaksanakan pada detik keenam,
sedangkan kasus tanpa pipeline baru selesai pada detik kesepuluh. Dengan
demikian telah terjadi percepatan sebanyak 1,67 x dari 10T menjadi hanya 6T.
sedangkan untuk pengerjaan 3 buah instruksi terjadi percepatan sebanyak 2,14 dari
15 T menjadi hanya 7T.
Untuk kasus pipeline sediri, 2 instruksi dapat dikerjakan dalam 6T(CPI=3) dan
instruksi dapat dikerjakan dalam 7T(CPT=2,3) dan untuk instruksi dapat dikerjakan
dalam 8T(CPI=2) ini berarti untuk 100 instruksi akan dapat dikerjakan dalam 104T
(CPI=1.04). pada kondisi ideal CPI akan berharga/bernilai 1.
13

Dalam teknik pipeline, problem dibagi menjadi deretan yang harus dilaksanakan
satu persatu setelah lainnya. Setiap tugas nantinya akan dieksekusi oleh proses
atau processor yang berbeda

Pipeline dapat meningkatkan kecepatan untuk problem yang sekuensial, dalam tiga
tipe komputasi:
1. Jika lebih dari satu instance dari problem yang akan dieksekusi.
2. Jika ada deretan item data yang harus di proses, masing-masing membutuhkan
operasi ganda.
14

3. Jika informasi untuk memulai proses berikutnya dapat diberikan sebelum proses
selesai melaksanakan operasi internalnya.
Diagram Ruang waktu pipeline
Tipe 1

Diagram Ruang waktu alterative

15

Diagram Ruang Waktu Pipeline Tipe 2


Pemrosesan Pipeline 10 Data

Diagram Ruang Waktu Pipeline Tipe 3

Pemrosesan Pipeline, Informasi di pass sebelum proses selesai

16

Jika jumlah tahap lebih besar dari jumlah processor dalam pipeline, kelompok tahap
dapat di assign untuk tiap processor.
Partitioning Processes onto processors

Permasalahan Instruksi Pipelining

Variasi Waktu:
Tidak semua tahap memakan waktu yang sama. Ini berarti untuk mendapatkan
kecepatan dalam instruksi pipelining sangat ditentukan oleh tahap yang paling
lambat. Masalah ini sangat akut dalam memproses instruksi, sejak instruksi yang
berbeda memiliki persyaratan operad waktu proses yang berbeda. Selain itu,
diperlukan mekanisme sinkronisasi untuk memastikan bahwa data lewat dari stage
ke stage hanya ketika kedua stage siap/
Percabangan (Branch):
Untuk mengambil instruksi berikutnya, kita harus tahu mana saja yang dibutuhkan,
jika instruksi berikutnya mungkin tidak diketahui sampai saat diproses
Jeda/Interupsi(Interuptions)
Interupsi membuat interupsi extra yang tidak terencana untuk masuk ke dalam
aliran instruksi. Jeda(Interrupt) harus berperan antar instruksi, yaitu ketika satu
instruksi telah selesai dan instruksi berikutya belum dimulai. Dengan pipelining,
instruksi berikutnya biasanya dimulai sebelum instruksi yang terlebih dahulu
selesai.
Data Berbahaya(Data Hazards)
17

Ketika beberapa instruksi di eksekusi secara parsial, masalah timbul jika mereka
mempunyai referensi data yang sama. Kita harus memastika bahwa instruksi
selanjutnya tidak berusaha untuk mengakses data lebih cepat dari instruksi
sebelumnya, jika ini terjadi akan menyebabkan hasil yang salah. Sebagai contoh
instruksi N+1 tidak harus diperbolehkan untuk mengambil sebuah operand yang
belum disimpan oleh instruksi N.

DAFTAR PUSTAKA
https://abdrahman172.wordpress.com/2013/11/09/siklus-instruksi-dan-pipelininginstruksi/
http://student.blog.dinus.ac.id/nanangarsyad/2015/07/03/arsitektur-pipeline/
https://ilhamewilsaputra.files.wordpress.com/2013/10/
http://en.wikipedia.com/pipelining_instruction

18

Anda mungkin juga menyukai