Pipelining
Pipelining
adalah teknik yang digunakan untuk meningkatkan throughput eksekusi CPU dengan
menggunakan sumber daya prosesor dengan cara yang lebih efisien.
Ide dasarnya
adalah untuk membagi instruksi prosesor menjadi serangkaian tahapan independen
kecil. Setiap tahap dirancang untuk melakukan bagian tertentu dari instruksi.
Pada tingkat yang sangat dasar, tahap ini dapat dipecah menjadi:
1.
Fetch unit : Mengambil instruksi dari memori
2.
Decode unit : Membaca sandi instruksi yang dieksekusi
3.
Execute unit :
Mengeksekusi instruksi
4.
Write unit : Menulis hasil kembali untuk
mendaftar atau memori
Pada CPU non-pipelined, ketika
instruksi sedang diproses pada tahap tertentu, tahap lainnya berada pada
keadaan idle - yang sangat tidak efisien. Jika Anda melihat diagram, ketika
instruksi 1 sedang diterjemahkan, Fetch, Execute dan Write Unit CPU tidak
digunakan dan dibutuhkan 8 jam siklus untuk mengeksekusi 2 instruksi.
Di sisi lain, pada CPU pipelined,
semua tahapan bekerja secara paralel. Ketika instruksi pertama sedang diterjemahkan
oleh Unit Decoder, instruksi kedua sedang diambil oleh fetch unit. Hanya
membutuhkan waktu 5 siklus clock untuk mengeksekusi 2 instruksi pada CPU
pipelined.
Perhatikan bahwa peningkatan jumlah
tahap dalam pipeline tidak akan selalu menghasilkan peningkatan eksekusi. Pada
CPU non-pipelined, instruksi hanya bisa mengambil 3 siklus, tetapi pada CPU
pipelined itu bisa mengambil 4 siklus karena tahapan yang berbeda yang
terlibat. Oleh karena itu, satu instruksi mungkin memerlukan siklus clock yang
lebih untuk mengeksekusi pada CPU pipelined. Tapi waktu yang dibutuhkan untuk
menyelesaikan eksekusi beberapa instruksi mendapat lebih cepat di CPU
pipelined. Jadi perlu ada keseimbangan di antaranya.
Salah
satu komplikasi utama dengan pipelining dalam (misalnya, 31-tahap pipelining
digunakan di beberapa Intel Pentium 4 prosesor) adalah ketika sebuah instruksi
cabang bersyarat sedang dieksekusi. Karena fakta bahwa prosesor tidak akan
dapat menentukan lokasi dari instruksi berikutnya, oleh karena itu harus menunggu
instruksi cabang untuk menyelesaikan dan seluruh pipeline mungkin perlu diflush sebagai hasilnya. Jika sebuah
program memiliki banyak instruksi cabang bersyarat, pipelining bisa memiliki
efek negatif pada kinerja secara keseluruhan. Untuk mengatasi masalah ini,
prediksi cabang dapat digunakan, tetapi ini juga dapat memiliki efek negatif
jika cabang-cabang diperkirakan salah.
RISC
(Reduced Instruction Set Computer)
RISC, yang jika diterjemahkan berarti “Komputasi Kumpulan Instruksi yang Disederhanakan”,
Merupakan sebuah arsitektur komputer
atau arsitektur komputasi modern dengan instruksi-instruksi dan jenis eksekusi
yang paling sederhana.
Arsitektur ini digunakan pada komputer
dengan kinerja tinggi, seperti komputer vektor. Selain digunakan dalam komputer
vektor, desain ini juga diimplementasikan pada prosesor komputer lain, seperti
pada beberapa mikroprosesor Intel 960, Itanium (IA64) dari Intel Corporation,
Alpha AXP dari DEC, R4x00 dari MIPS Corporation, PowerPC dan Arsitektur POWER
dari International Business Machine.
Selain itu, RISC juga umum dipakai
pada Advanced RISC Machine (ARM) dan StrongARM (termasuk di antaranya adalah
Intel XScale), SPARC dan UltraSPARC dari Sun Microsystems, serta PA-RISC dari
Hewlett-Packard.
Prosesor RISC hanya menggunakan
instruksi-instruksi sederhana yang bisa dieksekusi dalam satu siklus. Dengan
demikian, instruksi ‘MULT’ sebagaimana dijelaskan sebelumnya dibagi menjadi
tiga instruksi yang berbeda, yaitu “LOAD”, yang digunakan untuk memindahkan
data dari memori ke dalam register, “PROD”, yang digunakan untuk melakukan
operasi produk (perkalian) dua operan yang berada di dalam register (bukan yang
ada di memori) dan “STORE”, yang digunakan untuk memindahkan data dari register
kembali ke memori.
Berikut ini adalah urutan instruksi
yang harus dieksekusi agar yang terjadi sama dengan instruksi “MULT” pada
prosesor RISC (dalam 4 baris bahasa mesin):
LOAD A,
2:3
LOAD B, 5:2
PROD A, B
STORE 2:3, A
Semakin banyak baris instruksi,
semakin banyak lokasi RAM yang dibutuhkan untuk menyimpan instruksi-instruksi
tersebut. Kompailer juga harus melakukan konversi dari bahasa tingkat tinggi ke
bentuk kode instruksi 4 baris tersebut.
REFERENSI
No comments:
Post a Comment