1. Pengertian Pipeline
Pipeline adalah suatu cara yang
digunakan untuk melakukan sejumlah kerja secara bersama tetapi dalam tahap yang
berbeda yang dialirkan secara kontinu pada unit pemrosesan. Dengan cara ini,
maka unit pemrosesan selalu bekerja.
Teknik pipeline ini dapat diterapkan
pada berbagai tingkatan dalam sistemkomputer. Bisa pada level yang tinggi,
misalnya program aplikasi, sampai pada tingkat yang rendah, seperti pada
instruksi yang dijaankan oleh microprocessor.
Pada microprocessor yang tidak
menggunakan pipeline, satu instruksi dilakukan sampai selesai, baru instruksi
berikutnya dapat dilaksanakan. Sedangkan dalam microprocessor yang menggunakan
teknik pipeline, ketika satu instruksi sedangkan diproses, maka instruksi yang
berikutnya juga dapat diproses dalam waktu yang bersamaan. Tetapi, instruksi
yang diproses secara bersamaan ini, ada dalam tahap proses yang berbeda. Jadi,
ada sejumlah tahapan yang akan dilewati oleh sebuah instruksi.
Dengan penerapan pipeline ini pada
microprocessor akan didapatkan peningkatan dalam unjuk kerja microprocessor.
Hal ini terjadi karena beberapa instruksi dapat dilakukan secara parallel dalam
waktu yang bersamaan. Secara kasarnya diharapkan akan didapatkan peningkatan
sebesar X kali dibandingkan dengan microprocessor yang tidak menggunakan
pipeline, apabila tahapan yang ada dalam satu kali pemrosesan instruksi adalah
X tahap.
Karena beberapa instruksi diproses
secara bersamaan ada kemungkinan instruksi tersebut sama-sama memerlukan
resource yang sama, sehingga diperlukan adanya pengaturan yang tepat agar
proses tetap berjalan dengan benar. Sedangkan ketergantungan terhadap data,
bisa muncul, misalnya instruksi yang berurutan memerlukan data dari instruksi
yang sebelumnya. Kasus Jump, juga perlu perhatian, karena ketika sebuah
instruksi meminta untuk melompat ke suatu lokasi memori tertentu, akan terjadi
perubahan program counter, sedangkan instruksi yang sedang berada dalam salah
satu tahap proses yang berikutnya mungkin tidak mengharapkan terjadinya
perubahan program counter.
Teknik
pipeline yang diterapkan pada microprocessor, dapat dikatakan sebuah arsitektur
khusus. Ada perbedaan khusus antara model microprocessor yang tidak menggunakan
arsitektur pipeline dengan microprocessor yang menerapkan teknik ini.
Pada microprocessor yang tidak menggunakan pipeline, satu instruksi dilakukan sampai selesai, baru instruksi berikutnya dapat dilaksanakan. Sedangkan dalam microprocessoryang menggunakan teknik pipeline, ketika satu instruksi sedangkan diproses, maka instruksi yang berikutnya juga dapat diproses dalam waktu yang bersamaan. Tetapi, instruksi yang diproses secara bersamaan ini, ada dalam tahap proses yang berbeda.
Pada microprocessor yang tidak menggunakan pipeline, satu instruksi dilakukan sampai selesai, baru instruksi berikutnya dapat dilaksanakan. Sedangkan dalam microprocessoryang menggunakan teknik pipeline, ketika satu instruksi sedangkan diproses, maka instruksi yang berikutnya juga dapat diproses dalam waktu yang bersamaan. Tetapi, instruksi yang diproses secara bersamaan ini, ada dalam tahap proses yang berbeda.
Jadi, ada
sejumlah tahapan yang akan dilewati oleh sebuah instruksi.
Misalnya sebuah microprocessor menyelesaikan sebuah instruksi dalam 4 langkah. Ketika instruksi pertama masuk ke langkah 2, maka instruksi berikutnya diambil untuk diproses pada langkah 1 instruksi tersebut. Begitu seterusnya, ketika instruksi pertama masuk ke langkah 3, instruksi kedua masuk ke langkah 2 dan instruksi ketiga masuk ke langkah 1.
Misalnya sebuah microprocessor menyelesaikan sebuah instruksi dalam 4 langkah. Ketika instruksi pertama masuk ke langkah 2, maka instruksi berikutnya diambil untuk diproses pada langkah 1 instruksi tersebut. Begitu seterusnya, ketika instruksi pertama masuk ke langkah 3, instruksi kedua masuk ke langkah 2 dan instruksi ketiga masuk ke langkah 1.
2. Kenapa komputer menggunakan teknik Pipelining??
·
Drive for
computing speed never ends.
·
Improvements
from architecture or organization point of view are limited
·
Clock speed
enhancement is done, but more improvement should be sought from
·
instruction
execution perspective, instead of hardware design
·
Flyn’s
Taxonomy : SISD (Single Instruction Single stream of Data), SIMD (Single
·
Instruction
Multiple stream of data) or MIMD – Parallel
·
Parallel
Processor : may be a solution
·
Use two
processors (or more, instead of one) in a computer system
·
How do it
runs the code ? (program)
·
Suppose, we
have a problem :
C = (A2+ B2)
3. Intruksi pipeline
Tahapan pipeline
·
Mengambil
instruksi dan membuffferkannya
·
Ketika
tahapn kedua bebas tahapan pertama mengirimkan instruksi yang dibufferkan
tersebut
·
Pada saat
tahapan kedua sedang mengeksekusi instruksi, tahapan pertama memanfaatkan
siklus memori yang tidak dipakai untuk mengambil dan membuffferkan instruksi
berikutnya .
Instuksi pipeline:
Karena untuk setiap tahap pengerjaan
instruksi, komponen yang bekerja berbeda, maka dimungkinkan untuk mengisi
kekosongan kerja di komponen tersebut. Sebagai contoh :
Instruksi 1: ADD AX, AX
Instruksi 2: ADD EX, CX
Setelah CU menjemput instruksi 1
dari memori (IF), CU akan menerjemahkan instruksi tersebut(ID). Pada
menerjemahkan instruksi 1 tersebut, komponen IF tidak bekerja. Adanya
teknologi pipeline menyebabkan IF akan menjemput instruksi 2 pada saat ID
menerjemahkan instruksi 1. Demikian seterusnya pada saat CU menjalankan
instruksi 1 (EX), instruksi 2 diterjemahkan (ID).
Contoh
pengerjaan instruksi tanpa pipeline
t =
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
ADD AX,AX
|
IF
|
DE
|
IF
|
DE
|
EX
|
|||||
ADD BX,CX
|
IF
|
DE
|
IF
|
DE
|
EX
|
Disini instruksi baru akan dijemput
jika instruksi sebelumnya telah selesai dilaksanakan.
t =
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
ADD AX,AX
|
IF
|
DE
|
IF
|
DE
|
EX
|
|||||
ADD BX,CX
|
IF
|
DE
|
IF
|
DE
|
EX
|
|||||
ADD DX,DX
|
IF
|
DE
|
IF
|
DE
|
EX
|
Contoh pengerjaan instruksi dengan
pipeline
Disini instruksi baru akan dipanggil
setelah tahap IF menganggur (t2).
Dengan adanya pipeline dua instruksi
selesai dilaksanakan pada detik keenam (sedangkan pada kasus tanpa pipeline
baru selesai pada detik kesepuluh). Dengan demikian telah terjadi percepatan
sebanyak 1,67x dari 10T menjadi hanya 6T. Sedangkan untuk pengerjaan 3 buah
instruksi terjadi percepatan sebanyak 2, 14 dari 15T menjadi hanya 7T.
Untuk kasus pipeline sendiri, 2
instruksi dapat dikerjakan dalam 6T(CPI = 3) dan instruksi dapat dikerjakan
dalam 7T (CPT = 2,3) dan untuk 4 instruksi dapat dikerjakan dalam 8T (CPI
=2). Ini berarti utnuk 100 instruksi akan dapat dikerjakan dalam 104T (CPI =
1,04). Pada kondisi ideal CPI akan harga 1.
4. Permasalahan di (dalam) Instruksi Pipelining
·
VARIASI
WAKTU:
Tidak semua tahap memakan waktu yang
sama. Ini berarti untuk mendapatkan kecepatan dalam intruksi pipelining sangat
ditentukan oleh tahap yang paling lambat. Masalah ini sangat akut dalam
memproses instruksi, sejak instruksi yang berbeda memiliki persyaratan
operand waktu proses yang berbeda.
Selain itu, diperlukan mekanisme sinkronisasi untuk memastikan bahwa data lewat
dari stage ke stage hanya ketika kedua stage siap.
·
DATA
BERBAHAYA (DATA HAZARDS):
Ketika beberapa instruksi di
eksekusi secara parsial, masalah timbul jika mereka referensi data yang sama.
Kita harus memastikan 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.
·
PERCABANGAN
(BRANCH):
untuk mengambil instruksi
berikutnya, kita harus tahu mana saja yang dibutuhkan, Jika instruksi ini
adalah cabang bersyarat (conditional branch) instruksi berikutnya mungkin tidak
diketahui sampai saat diproses.
·
JEDA(INTERUPTSI):
interupsi membuat instruksi extra
yang tidak terencana untuk masuk kedalam aliran intruksi. jeda(Interrupt)
harus berperan antar instruksi. yaitu, ketika satu instruksi telah selesai dan
berikutnya belum dimulai. Dengan pipelining, instruksi berikutnya biasanya
dimulai sebelum yang sekarang telah selesai.
Semua masalah ini harus diselesaikan
dalam konteks kebutuhan kita untuk mendaatkan kinerja dengan kecepatan tinggi.
Jika kita tidak dapat mencapai kecepatan yang cukup, pipelining mungkin tidak
sepadan.
5. Beberapa Solusi
Strategi pemecahan masalah diatas
adalah sebagai berikut :
·
VARIASI
PEMILIHAN WAKTU (TIMING VARIATIONS)
Untuk memaksimalkan kecepatan, untuk
menyeragam, tahap pertama yang harus dilakukan adalah mekanisme waktu
yang diperlukan. Sebuah metode sinkron dapat digunakan,jika tahapan telah
dianggap lengkap dari sejumlah tertentu siklus waktu. Namun, teknik
asynchronous secara umum lebih efisien. Bit atau garis sinyal dilewatkan maju
ke tahap berikutnya menunjukkan data sudah valid. Sebuah sinyal juga harus
lulus kembali dari tahap berikutnya ketika data telah diterima.
Dalam semua kasus harus ada sebuah
penyangga antar tahap untuk menyimpan data, kadang-kadang penyangga ini
diperluas ke memori yang dapat menyimpan beberapa item data. Setiap tahap harus
berhati-hati untuk tidak menerima input data sampai berlaku, dan tidak untuk
menghasilkan data output sampai ada ruang dalam penyangga (buffer).
·
DATA BERBAHAYA
(DATA HAZARDS)
Untuk melindungi dari data yang
berbahaya, perlu untuk menyadari setiap tahap yang digunakan oleh tahap
pipelining yang lebih jauh . Jenis penggunaan juga harus diketahui, dua
pembacaan yang terurut tidak boleh bertentangan dan tidak boleh menyebabkan
perlambatan pada pipeline. Namun akan ada kemungkinan konflik jika
terjadi penulisan.
Pipeline biasanya dilengkapi dengan
small associative check memory yang dapat menyimpan alamat dan jenis operasi
(read atau write) untuk setiap instruksi yang ada di pipeline. Konsep
“alamat(address)t” harus diperluas untuk mengidentifikasi register. Setiap
instruksi hanya dapat mempengaruhi sejumlah kecil dari operand, tapi efek
yang tidak langsung addressing tidak boleh diabaikan.
Ketika instruksi bersiap memasuki
pipa, alamat operan telah disimpan.Jika ada konflik, instruksi (dan yang di
belakangnya) harus menunggu. Ketika ada konflik, instruksi memasuki pipa dan
alamat operan disimpan dalam memori cek. Ketika instruksi selesai, alamat ini
akan dihapus. memori harus bisa untuk menangani proses pencarian berkecepatan
tinggi yangdiperlukan.
·
PERCABANGAN
(BRANCHING)
Masalah dalam percabangan adalah
pipelining diperlambat oleh instruksi karena kita tidak tahu cabang yang
mana yang harus kita ikuti. Dengan tidak adanya bantuan spesial dalam masalah
ini, perlu menunda pemrosesan instruksi selanjutnya sampai tujuan
percabangan diselesaikan. Karena cabang sangat sering, penundaan ini bersifat
tidak dapat diterima.
Salah satu solusi yang banyak
digunakan, terutama di RISC, adalah menunda percabangan. Dalam metode ini,
rangkaian instruksi ini dirangkai sedemikian rupa, sehingga setelah
suatuinstruksi, instruksi berikutnya bisa selalu di ekskusi, dan kemudian
cabang di hapus. Dengan begitu tiap-tiap cabang harus diikuti oleh satu
instruksi yang secara logika mendahuluinya dan diharapkan untuk dieksekusi
dalam semua kasus. Hal ini akan memberikan ruang bernafas (istirahat) bagi
pipeline. Jika perlu, instruksi ini bisa merupakan suatu no-op, tapi, seringnya
penggunaan no-op akan merusak fungsi kecepatan.
Penggunaan teknik ini memerlukan
metode pengkodean yang membingungkan bagi progammer, tetapi tidak terlalu sulit
bagi generator kode compiler.
Kebanyakan teknik lain menggunakan
ekskusi spekulatif, di mana instruksi yang diproses yang tidak dikenal dengan
pasti, dianggap sebagai benar. Hal ini harus dihindari, harus dibuang dan tidak
di simpan.
Solusi yang biasa digunakan adalah
dengan mengikuti cabang yang jelas, yaitu instruksi sekuensial berikutnya,
berhati-hati untuk tidak melakukan tindakan yang tidak bisa dirubah. Operan
mungkin diambil dan di proses, tetapi tidak akan ada hasil sampai cabang di
terjemahkan. Jika pilihan itu salah, dapat di tinggalkan dan cabang alternatif
dapat di proses.
Metode ini bekerja dengan cukup baik
jika cabang jelas dan benar. Ketika coding menggunakan pipelined CPU,
perawatan harus dilakukan untuk kode cabang (terutama transfer error) sehingga
jalur luruslah yang biasanya diambil. Tentu saja, bercabang yang tidak di
perlukan harus dihindari.
Kemungkinan lain adalah untuk
menyusun kembali program sehingga cabang ada lebih sedikit, misalnya dengan
tidak mengikuti jenis loop tertentu. Ini dapat dilakukan dengan mengoptimalkan
kompiler atau, dalam beberapa kasus, dengan perangkat keras itu sendiri.
Sebuah strategi yang pada umumya di
gunakan oleh banyak arsitektur saat ini beberapa jenis prediksi cabang. Hal ini
mungkin berdasarkan informasi yang diberikan oleh kompilator atau pada
statistik yang dikumpulkan oleh perangkat keras. Tujuaannya adalah membuat
perkiraan terbaik apakah cabang tertentu akan diambil atau tidak, dan
menggunakan perkiraan ini untuk melanjutkan pipelining.
Solusi yang membutuhkan harga yang
lebih, kadang-kadang digunakan untuk memisahkan pipeline dan memulai memproses
kedua cabang. Gagasan ini mendapat perhatian baru dalam beberapa prosesor
terbaru.
6. Keuntungan dan Kerugian
Pipelining tidak membantu dalam
semua kasus. Ada beberapa kemungkinan kerugian. Pipa instruksi dikatakan
sepenuhnya pipelined jika dapat menerima instruksi baru setiap clock cycle.
Sebuah pipa yang tidak sepenuhnya pipelined telah menunggu siklus yang menunda
kemajuan pipa.
Keuntungan dari Pipelining:
1. Waktu siklus prosesor berkurang,
sehingga meningkatkan tingkat instruksi dalam
kebanyakan
kasus( lebih cepat selesai).
2. Beberapa combinational sirkuit
seperti penambah atau pengganda dapat dibuat lebih cepat dengan menambahkan
lebih banyak sirkuit. Jika pipelining digunakan sebagai pengganti, hal itu
dapat menghemat sirkuit & combinational yang lebih kompleks.
3. Pemrosesan dapat dilakukan lebih
cepat, dikarenakan beberapa proses dilakukan secara bersamaan dalam satu waktu.
Kekurangan Pipelining:
1. Pipelined prosesor menjalankan
beberapa instruksi pada satu waktu. Jika ada beberapa cabang yang mengalami
penundaan cabang (penundaan memproses data) dan akibatnya proses yang dilakukan
cenderung lebih lama.
2. Instruksi latency di non-pipelined
prosesor sedikit lebih rendah daripada dalam pipelined setara. Hal ini
disebabkan oleh fakta bahwa intruksi ekstra harus ditambahkan ke jalur data
dari prosesor pipeline.
3. Kinerja prosesor di pipeline jauh
lebih sulit untuk meramalkan dan dapat bervariasi lebih luas di antara program
yang berbeda.
4. Karena beberapa instruksi diproses
secara bersamaan ada kemungkinan instruksi tersebut sama-sama memerlukan
resource yang sama, sehingga diperlukan adanya pengaturan yang tepat agar
proses tetap berjalan dengan benar.
5. Sedangkan ketergantungan terhadap
data, bisa muncul, misalnya instruksi yang berurutan memerlukan data dari
instruksi yang sebelumnya.
6. Kasus Jump, juga perlu perhatian,
karena ketika sebuah instruksi meminta untuk melompat ke suatu lokasi memori
tertentu, akan terjadi perubahan program counter, sedangkan instruksi yang
sedang berada dalam salah satu tahap proses yang berikutnya mungkin tidak
mengharapkan terjadinya perubahan program counter.
.
7. Kesulitan dalam Pipeline
Untuk
menerapkan prinsip multi-stage atau mulai saat ini kita namakan
pipelining di prosesor, diperlukan organisasi prosesor khusus. Pada dasarnya,
prosesor dipartisi menjadi sejumlah unit-unit kecil dengan fungsi spesifik.
Setiap unit berperan untuk menyelesaikan sebagian dari
instruksi-intruksi berikut :
Instruction fetch, decode, operand address calculation, operand fetch, execute dan store result.
Dalam proses di atas terkadang
sering terjadi kendala/conflict seperti:
·
Terjadinya
pause (Pi), karena adanya data conflict dalam program tersebut
·
Terjadinya
data error dikarenakan banyaknya proses yang dilakukan bersamaan
·
Terjadinya
pengambilan data secara bersamaan, sehingga salah satu proses tertunda
·
Terjadinya
penumpukan data di salah satu intruksi sehingga ada beberapa proses yg di tunda
·
Dengan
terjadinya conflict tadi, speed-up yang diperoleh menjadi lebih kecil (lambat)
dibandingkan dengan tanpa conclict.
No comments:
Write komentar