Pipelining instruksi

Pipelining instruksi adalah teknik yang digunakan dalam desain mikroprosesor modern, mikrokontroler dan CPU untuk meningkatkan throughput instruksi mereka (jumlah instruksi yang dapat dieksekusi dalam satuan waktu).

Ide utamanya adalah membagi (disebut "split") pemrosesan instruksi CPU, seperti yang didefinisikan oleh mikrokode instruksi, menjadi serangkaian langkah independen operasi mikro (juga disebut "microinstructions", "micro-op" atau "µop"), dengan penyimpanan di akhir setiap langkah. Hal ini memungkinkan logika kontrol CPU untuk menangani instruksi pada tingkat pemrosesan langkah paling lambat, yang jauh lebih cepat daripada waktu yang dibutuhkan untuk memproses instruksi sebagai satu langkah.

Istilah pipeline mengacu pada fakta bahwa setiap langkah membawa satu mikroinstruksi (seperti setetes air), dan setiap langkah dihubungkan ke langkah lain (analogi; mirip dengan pipa air).

Kebanyakan CPU modern digerakkan oleh clock. CPU secara internal terdiri dari logika dan memori (flip flop). Ketika sinyal clock tiba, flip flop menyimpan nilai barunya kemudian logika memerlukan periode waktu untuk mendekode nilai baru flip flop. Kemudian pulsa clock berikutnya tiba dan flip flop menyimpan nilai yang lain, dan seterusnya. Dengan memecah logika menjadi potongan-potongan yang lebih kecil dan menyisipkan flip flop di antara potongan-potongan logika, waktu yang dibutuhkan oleh logika (untuk memecahkan kode nilai hingga menghasilkan keluaran yang valid tergantung pada nilai-nilai ini) berkurang. Dengan cara ini periode clock dapat dikurangi.
Sebagai contoh, pipeline RISC dipecah menjadi lima tahap dengan satu set flip flop di antara setiap tahap sebagai berikut:

  1. Pengambilan instruksi
  2. Dekode instruksi dan register fetch
  3. Jalankan
  4. Akses memori
  5. Daftar tulis kembali

Prosesor dengan pipelining secara internal terdiri dari tahapan (modul) yang dapat bekerja secara semi-independen pada instruksi mikro yang terpisah. Setiap tahap dihubungkan oleh flip flop ke tahap berikutnya (seperti "rantai") sehingga output tahap tersebut merupakan input ke tahap lain sampai pekerjaan pemrosesan instruksi selesai. Organisasi modul internal prosesor seperti itu mengurangi waktu pemrosesan instruksi secara keseluruhan.

Arsitektur non-pipeline tidak seefisien karena beberapa modul CPU menganggur sementara modul lain aktif selama siklus instruksi. Pipelining tidak sepenuhnya menghilangkan waktu menganggur dalam CPU pipelined, tetapi membuat modul CPU bekerja secara paralel meningkatkan throughput instruksi.

Pipeline instruksi dikatakan sepenuhnya pipelined jika dapat menerima instruksi baru setiap siklus clock. Pipeline yang tidak sepenuhnya pipelined memiliki siklus tunggu yang menunda kemajuan pipeline.

Pipeline lima tahap dasar dalam mesin RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Sumbu vertikal adalah instruksi-instruksi yang berurutan, sumbu horisontal adalah waktu. Jadi dalam kolom hijau, instruksi paling awal adalah dalam tahap WB, dan instruksi terbaru sedang menjalani fetch instruksi.Zoom
Pipeline lima tahap dasar dalam mesin RISC (IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back). Sumbu vertikal adalah instruksi-instruksi yang berurutan, sumbu horisontal adalah waktu. Jadi dalam kolom hijau, instruksi paling awal adalah dalam tahap WB, dan instruksi terbaru sedang menjalani fetch instruksi.

Keuntungan dan Kerugian Pipelining

Keuntungan Pipelining:

  1. Waktu siklus prosesor berkurang; meningkatkan throughput instruksi. Pipelining tidak mengurangi waktu yang diperlukan untuk menyelesaikan instruksi; sebaliknya, pipelining meningkatkan jumlah instruksi yang dapat diproses secara bersamaan ("sekaligus") dan mengurangi penundaan di antara instruksi yang diselesaikan (disebut 'throughput').
    Semakin banyak tahapan pipeline yang dimiliki prosesor, semakin banyak instruksi yang dapat diproses "sekaligus" dan semakin sedikit penundaan di antara instruksi yang diselesaikan. Setiap mikroprosesor tujuan umum yang diproduksi saat ini menggunakan setidaknya 2 tahap pipeline hingga 30 atau 40 tahap.
  2. Jika pipelining digunakan, unit logika Aritmatika CPU dapat dirancang lebih cepat, tetapi akan lebih kompleks.
  3. Pipelining secara teori meningkatkan kinerja dibandingkan inti yang tidak dipipelined dengan faktor jumlah tahapan (dengan asumsi frekuensi clock juga meningkat dengan faktor yang sama) dan kode ini ideal untuk eksekusi pipeline.
  4. CPU Pipelined umumnya bekerja pada frekuensi clock yang lebih tinggi daripada frekuensi clock RAM, (pada teknologi 2008, RAM bekerja pada frekuensi rendah dibandingkan dengan frekuensi CPU) meningkatkan kinerja komputer secara keseluruhan.

Kerugian dari Pipelining:

Pipelining memiliki banyak kelemahan meskipun ada banyak teknik yang digunakan oleh CPU dan desainer kompiler untuk mengatasi sebagian besar dari mereka; berikut ini adalah daftar kelemahan umum:

  1. Desain prosesor non-pipelined lebih sederhana dan lebih murah untuk diproduksi, prosesor non-pipelined hanya mengeksekusi satu instruksi pada satu waktu. Hal ini mencegah penundaan cabang (dalam Pipelining, setiap cabang tertunda) serta masalah ketika instruksi serial dieksekusi secara bersamaan.
  2. Dalam prosesor pipelined, penyisipan flip flop antar modul meningkatkan latensi instruksi dibandingkan dengan prosesor non-pipelining.
  3. Prosesor non-pipelined akan memiliki throughput instruksi yang ditentukan. Performa prosesor pipelined jauh lebih sulit diprediksi dan dapat sangat bervariasi untuk program yang berbeda.
  4. Banyak desain yang menyertakan pipeline sepanjang 7, 10, 20, 31, dan bahkan lebih banyak tahap; kerugian dari pipeline yang panjang adalah ketika program bercabang, seluruh pipeline harus dibilas (dibersihkan). Throughput pipeline yang lebih tinggi menjadi kurang ketika kode yang dieksekusi mengandung banyak cabang: prosesor tidak dapat mengetahui sebelumnya di mana harus membaca instruksi berikutnya, dan harus menunggu instruksi cabang selesai, membiarkan pipeline di belakangnya kosong. Kerugian ini dapat dikurangi dengan memprediksi apakah instruksi cabang bersyarat akan bercabang berdasarkan aktivitas sebelumnya. Setelah cabang diselesaikan, instruksi berikutnya harus melakukan perjalanan jauh melalui pipeline sebelum hasilnya tersedia dan prosesor melanjutkan "bekerja" lagi. Dalam kasus ekstrim seperti itu, kinerja prosesor pipelined bisa lebih buruk daripada prosesor non-pipelined.
  5. Sayangnya, tidak semua instruksi bersifat independen. Dalam pipeline sederhana, menyelesaikan sebuah instruksi mungkin memerlukan 5 tahap. Untuk beroperasi pada kinerja penuh, pipeline ini perlu menjalankan 4 instruksi independen berikutnya saat instruksi pertama selesai. Salah satu dari 4 instruksi tersebut mungkin bergantung pada output dari instruksi pertama, menyebabkan logika kontrol pipeline menunggu dan memasukkan stall atau siklus clock yang terbuang ke dalam pipeline sampai ketergantungan diselesaikan. Untungnya, teknik seperti forwarding dapat secara signifikan mengurangi kasus-kasus di mana mengulur-ulur waktu diperlukan.
  6. Program yang memodifikasi sendiri mungkin gagal dieksekusi dengan benar pada arsitektur pipelined ketika instruksi yang dimodifikasi berada di dekat instruksi yang sedang dieksekusi. Hal ini bisa disebabkan oleh instruksi yang mungkin sudah berada di Prefetch Input Queue, sehingga modifikasi mungkin tidak berlaku untuk eksekusi instruksi yang akan datang. Tembolok instruksi membuat masalah menjadi lebih buruk lagi.
  7. Bahaya: Ketika seorang programmer (atau compiler) menulis kode assembly, mereka umumnya berasumsi bahwa setiap instruksi dieksekusi sebelum instruksi berikutnya dieksekusi. Ketika asumsi ini tidak divalidasi oleh pipelining, hal itu menyebabkan program berperilaku tidak benar, situasi ini dikenal sebagai hazard.
    Berbagai
    teknik untuk menyelesaikan hazard atau mengatasi seperti penerusan dan penundaan (dengan memasukkan stall atau siklus clock yang terbuang) ada.

Contoh

Saluran pipa generik

Di sebelah kanan adalah pipa generik dengan empat tahap:

  1. Ambil
  2. Decode
  3. Jalankan
  4. Tulis-kembali

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

Pelaksanaannya adalah sebagai berikut:

Waktu

Eksekusi

0

Empat instruksi sedang menunggu untuk dieksekusi

1

  • instruksi hijau diambil dari memori

2

  • instruksi hijau diterjemahkan
  • instruksi ungu diambil dari memori

3

  • instruksi hijau dieksekusi (operasi aktual dilakukan)
  • instruksi ungu didekode
  • instruksi biru diambil

4

  • hasil instruksi hijau ditulis kembali ke berkas register atau memori
  • instruksi ungu dieksekusi
  • instruksi biru diterjemahkan
  • instruksi merah diambil

5

  • instruksi hijau selesai
  • instruksi ungu ditulis kembali
  • instruksi biru dieksekusi
  • instruksi merah diterjemahkan

6

  • Instruksi ungu sudah selesai
  • instruksi biru ditulis kembali
  • instruksi merah dieksekusi

7

  • instruksi biru selesai
  • instruksi merah ditulis kembali

8

  • instruksi merah selesai

9

Semua instruksi dieksekusi

Gelembung

Ketika terjadi "hiccup" (interupsi) dalam eksekusi, sebuah "gelembung" tercipta dalam pipeline di mana tidak ada hal berguna yang terjadi. Pada siklus 2, pengambilan instruksi ungu ditunda dan tahap decoding pada siklus 3 sekarang berisi gelembung. Segala sesuatu di belakang instruksi ungu juga tertunda tetapi segala sesuatu di depan instruksi ungu berlanjut dengan eksekusi.

Jelas, jika dibandingkan dengan eksekusi di atas, gelembung menghasilkan total waktu eksekusi 8 clock ticks, bukan 7 clock ticks.

Bubbles seperti stall (penundaan), di mana tidak ada hal yang berguna yang akan terjadi untuk fetch, decode, execute dan writeback. Ini seperti kode NOP (kependekan dari No OPeration).

Contoh 1

Instruksi tipikal untuk menambahkan dua angka mungkin ADD A, B, C, yang menambahkan nilai yang ditemukan di lokasi memori A dan B, dan kemudian menempatkan hasilnya di lokasi memori C. Dalam prosesor pipelined, pengontrol pipeline akan memecahnya 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 lokasi memori berlabel 'A' dan 'B' dimuat (disalin) ke dalam register-register ini, kemudian ditambahkan, dan hasilnya disimpan dalam lokasi memori berlabel 'C'.

Dalam contoh ini, pipeline terdiri dari tiga tahap, yaitu long-load, execute, dan store. Masing-masing langkah disebut tahapan pipeline.

Pada prosesor non-pipelined, hanya satu tahap yang dapat bekerja pada satu waktu sehingga seluruh instruksi harus selesai sebelum instruksi berikutnya dapat dimulai. Pada prosesor pipelined, semua tahapan dapat bekerja sekaligus pada instruksi yang berbeda. Jadi, ketika instruksi ini berada pada tahap execute, instruksi kedua akan berada pada tahap decode dan instruksi ketiga akan berada pada tahap fetch.

Contoh 2

Untuk lebih memahami konsep ini, kita bisa melihat pipeline 3-tahap teoretis:

Panggung

Deskripsi

Memuat

Membaca instruksi dari memori

Jalankan

Jalankan instruksi

Toko

Menyimpan hasil dalam memori dan/atau register

dan daftar perakitan pseudo-code yang akan dieksekusi:

LOAD #40, A ; memuat 40 di A MOVE A, B ; menyalin A di B ADD #20, B ; menambahkan 20 ke B STORE B, 0x300 ; menyimpan B ke dalam sel memori 0x300

Beginilah cara pelaksanaannya:

Jam 1

Memuat

Jalankan

Toko

LOAD

 

 

Instruksi LOAD diambil dari memori.

Jam 2

Memuat

Jalankan

Toko

PINDAH

LOAD

 

Instruksi LOAD dieksekusi, sementara instruksi MOVE diambil dari memori.

Jam 3

Memuat

Jalankan

Toko

ADD

PINDAH

LOAD

Instruksi LOAD sedang dalam tahap Store, dimana hasilnya (angka 40) akan disimpan dalam register A. Sementara itu, instruksi MOVE sedang dieksekusi. Karena instruksi ini harus memindahkan isi A ke dalam B, maka harus menunggu berakhirnya instruksi LOAD.

Jam 4

Memuat

Jalankan

Toko

TOKO

ADD

PINDAH

Instruksi STORE dimuat, sementara instruksi MOVE sedang menyelesaikan dan ADD sedang menghitung.

Dan seterusnya. Perhatikan bahwa, kadang-kadang, sebuah instruksi akan bergantung pada hasil dari instruksi yang lain (seperti contoh MOVE kita). Ketika lebih dari satu instruksi mereferensikan lokasi tertentu untuk sebuah operan, baik membacanya (sebagai input) atau menulisnya (sebagai output), mengeksekusi instruksi-instruksi tersebut dalam urutan yang berbeda dari urutan program aslinya dapat menyebabkan situasi bahaya (yang disebutkan di atas).

Pipeline 4-tahap generik; kotak berwarna mewakili instruksi yang independen satu sama lainZoom
Pipeline 4-tahap generik; kotak berwarna mewakili instruksi yang independen satu sama lain

Gelembung dalam siklus 3 menunda eksekusiZoom
Gelembung dalam siklus 3 menunda eksekusi

Halaman terkait

  • Saluran pipa (komputasi)
  • Komputasi paralel
  • Paralelisme tingkat instruksi

Pertanyaan dan Jawaban

T: Apa yang dimaksud dengan pipelining instruksi?


J: Pipelining instruksi adalah teknik yang digunakan dalam desain mikroprosesor modern, mikrokontroler, dan CPU untuk meningkatkan throughput instruksi mereka dengan membagi pemrosesan instruksi CPU menjadi serangkaian langkah independen dengan penyimpanan di akhir setiap langkah.

T: Bagaimana cara kerja pipelining?


J: Pipelining bekerja dengan memecah logika menjadi bagian-bagian yang lebih kecil dan menyisipkan flip flop di antara potongan-potongan logika, yang mengurangi waktu yang diperlukan logika untuk memecahkan kode nilai hingga menghasilkan output yang valid tergantung pada nilai-nilai ini. Hal ini memungkinkan periode clock yang lebih cepat.

T: Apa saja contoh pipeline?


J: Contoh pipeline adalah pipeline RISC, yang dibagi menjadi lima tahap dengan satu set flip flop di antara setiap tahap.

T: Bagaimana pipelining meningkatkan throughput instruksi?


J: Pipelining meningkatkan throughput instruksi dengan memungkinkan modul CPU bekerja secara paralel, yang mengurangi waktu menganggur selama siklus instruksi dan meningkatkan waktu pemrosesan secara keseluruhan.

T: Apakah setiap jalur pipa sepenuhnya menggunakan pipelining?


J: Tidak, tidak semua pipeline ter-pipelining sepenuhnya; beberapa pipeline memiliki siklus tunggu yang menunda kemajuan dalam pipeline.

AlegsaOnline.com - 2020 / 2023 - License CC3