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.
IBM Stretch adalah proyek yang mengusulkan istilah Fetch, Decode, dan
Execute yang telah menjadi istilah pada umumnya .
The Atmel AVR dan PIC mikrokontroler masing-masing memiliki pipeline dua
tahap.
"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:
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
Situasi Khusus
Program self-modification
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
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
8
9
Bubble
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
Execute
Mengeksekusi instruksi
Store
Execute
Store
LOAD
Instruksi LOAD diambil dari memori.
Clock2
Load
MOVE
Execute
Store
LOAD
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
-
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
15
16
Jika jumlah tahap lebih besar dari jumlah processor dalam pipeline, kelompok tahap
dapat di assign untuk tiap processor.
Partitioning Processes onto processors
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