Wed. Sep 16th, 2026
Mengenal Data Hazard, Control Hazard, dan Structural Hazard pada Pipelining

Pipelining menjadi salah satu teknik penting yang membuat prosesor mampu memproses instruksi dengan lebih efisien. Dengan membagi proses eksekusi menjadi beberapa tahap, beberapa instruksi dapat dikerjakan secara tumpang tindih pada waktu yang sama.

Namun, bukan berarti pipeline selalu berjalan mulus. Ada kondisi tertentu yang membuat instruksi harus menunggu, dihentikan sementara, atau bahkan dibatalkan. Kondisi tersebut dikenal sebagai pipeline hazard.

Secara umum, ada tiga jenis pipeline hazard yang perlu dipahami, yaitu data hazard, control hazard, dan structural hazard.

Ketiganya memiliki penyebab yang berbeda. Memahami perbedaannya akan membantu kita melihat bagaimana CPU modern menjaga agar instruksi tetap berjalan dengan benar dan efisien.

Apa Itu Pipeline Hazard?

Pipeline hazard adalah kondisi yang dapat mengganggu aliran normal instruksi di dalam pipeline prosesor.

Hazard muncul ketika sebuah instruksi belum bisa melanjutkan ke tahap berikutnya karena adanya ketergantungan data, perubahan alur program, atau keterbatasan sumber daya hardware.

Jika tidak ditangani dengan baik, hazard dapat menyebabkan:

  • Pipeline stall
  • Instruksi harus menunggu
  • Beberapa instruksi harus dibatalkan
  • Throughput CPU menurun
  • Resource hardware tidak dimanfaatkan secara maksimal

Secara umum, pipeline hazard dibagi menjadi:

  1. Data Hazard
  2. Control Hazard
  3. Structural Hazard

Mari kita bahas satu per satu.

1. Data Hazard

Data hazard terjadi ketika sebuah instruksi bergantung pada data yang dihasilkan atau digunakan oleh instruksi lainnya.

Sederhananya, CPU ingin menjalankan sebuah instruksi, tetapi data yang dibutuhkan belum tersedia.

Contohnya:

Instruksi 1: R1 = R2 + R3
Instruksi 2: R4 = R1 + R5

Instruksi kedua membutuhkan nilai R1.

Masalahnya, R1 baru dihasilkan oleh instruksi pertama. Jika pipeline menjalankan instruksi kedua terlalu cepat, data yang digunakan bisa saja belum merupakan hasil terbaru.

Inilah yang disebut data hazard.

Jenis-Jenis Data Hazard

Data hazard biasanya dibagi menjadi tiga jenis utama:

  • RAW (Read After Write)
  • WAR (Write After Read)
  • WAW (Write After Write)

A. Read After Write (RAW)

RAW terjadi ketika sebuah instruksi ingin membaca data sebelum instruksi sebelumnya selesai menulis data tersebut.

Contoh:

Instruksi 1: R1 = R2 + R3
Instruksi 2: R4 = R1 + R5

Instruksi kedua membaca R1, sedangkan instruksi pertama masih dalam proses menghasilkan R1.

RAW sering disebut sebagai true dependency karena instruksi kedua memang membutuhkan hasil dari instruksi pertama.

B. Write After Read (WAR)

WAR terjadi ketika sebuah instruksi ingin menulis data sebelum instruksi sebelumnya selesai membaca data tersebut.

Contoh sederhana:

Instruksi 1: R4 = R1 + R2
Instruksi 2: R1 = R5 + R6

Instruksi pertama harus membaca R1 terlebih dahulu sebelum instruksi kedua mengubah nilai R1.

Jenis hazard ini lebih sering menjadi perhatian pada prosesor yang memungkinkan eksekusi instruksi tidak berurutan.

C. Write After Write (WAW)

WAW terjadi ketika dua instruksi ingin menulis ke lokasi yang sama, tetapi urutan penulisannya dapat menjadi masalah.

Contohnya:

Instruksi 1: R1 = R2 + R3
Instruksi 2: R1 = R4 + R5

Keduanya menulis ke R1.

Jika instruksi kedua selesai lebih dahulu dalam sistem yang memungkinkan eksekusi tidak berurutan, hasil akhirnya dapat menjadi tidak sesuai dengan urutan program jika tidak ditangani dengan benar.

Bagaimana Data Hazard Diatasi?

CPU menggunakan beberapa teknik untuk mengurangi atau mengatasi data hazard.

Forwarding

Forwarding memungkinkan hasil dari sebuah instruksi diteruskan langsung ke instruksi yang membutuhkan data tersebut tanpa harus menunggu hasil ditulis kembali ke register.

Contohnya:

Instruksi 1
   ↓
Hasil tersedia
   ↓
Forwarding
   ↓
Instruksi 2

Teknik ini dapat mengurangi waktu tunggu pada pipeline.

Pipeline Stall

Jika data belum tersedia dan tidak dapat dilakukan forwarding, CPU dapat melakukan stall.

Artinya, pipeline menunggu beberapa siklus sampai data yang dibutuhkan tersedia.

Contoh sederhananya:

Instruksi 1 → Execute → Write Back
                         ↑
                         │
                     menunggu
                         │
Instruksi 2 ─────────────┘

Stall memang membantu menjaga hasil tetap benar, tetapi terlalu banyak stall dapat menurunkan performa.

Register Renaming

Register renaming dapat membantu mengatasi jenis dependency tertentu, terutama WAR dan WAW, pada prosesor yang mendukung eksekusi out-of-order.

CPU menggunakan register fisik tambahan untuk mengurangi konflik penggunaan register arsitektural.

2. Control Hazard

Jenis hazard berikutnya adalah control hazard.

Control hazard terjadi ketika CPU tidak mengetahui instruksi mana yang harus diambil atau dijalankan berikutnya karena adanya perubahan alur program.

Masalah ini biasanya muncul pada:

  • Branch
  • Jump
  • Conditional statement
  • Percabangan program

Contohnya:

if (A > B) {
    proses A
} else {
    proses B
}

CPU perlu mengetahui apakah kondisi A > B bernilai benar atau salah.

Sebelum hasil kondisi diketahui, CPU belum tentu mengetahui instruksi mana yang harus masuk ke pipeline berikutnya.

Contoh Control Hazard

Bayangkan pipeline sedang memproses:

Instruksi A
Instruksi B
Branch
Instruksi C
Instruksi D

Jika branch ternyata mengarah ke instruksi lain, instruksi C dan D yang sudah terlanjur masuk pipeline mungkin tidak diperlukan.

CPU harus membuang instruksi tersebut dan mengambil instruksi dari alamat tujuan branch.

Proses ini disebut pipeline flush.

Branch Prediction

Salah satu teknik penting untuk mengatasi control hazard adalah branch prediction.

CPU mencoba memprediksi apakah sebuah branch akan:

  • Diambil (taken)
  • Tidak diambil (not taken)

Jika prediksi benar, CPU dapat terus mengisi pipeline tanpa harus menunggu hasil branch.

Namun, jika prediksi salah, instruksi yang sudah diambil berdasarkan prediksi tersebut harus dibatalkan.

Contohnya:

CPU memprediksi:
Branch → Taken

Jika benar:
Pipeline terus berjalan.

Jika salah:
Instruksi yang salah → Flush
                    ↓
              Ambil instruksi benar

Karena itu, kemampuan branch prediction menjadi salah satu bagian penting pada prosesor modern.

Dampak Control Hazard

Control hazard dapat menyebabkan:

  • Pipeline stall
  • Pipeline flush
  • Instruksi terbuang
  • Throughput menurun

Semakin panjang pipeline sebuah CPU, kesalahan prediksi branch berpotensi membuang lebih banyak pekerjaan yang sudah dilakukan.

3. Structural Hazard

Structural hazard terjadi ketika beberapa instruksi membutuhkan resource hardware yang sama pada waktu yang bersamaan.

Dengan kata lain, masalahnya bukan pada data atau percabangan program, tetapi karena hardware yang tersedia tidak cukup untuk melayani semua instruksi pada saat yang sama.

Contohnya, sebuah CPU hanya memiliki satu unit tertentu yang harus digunakan oleh dua instruksi pada waktu yang sama.

Misalnya:

Instruksi A → membutuhkan Memory Unit
Instruksi B → membutuhkan Memory Unit

Jika hanya tersedia satu resource dan keduanya membutuhkannya pada waktu yang sama, salah satu instruksi harus menunggu.

Contoh Structural Hazard

Bayangkan sebuah pipeline memiliki satu port memori.

Pada saat yang sama:

Instruksi A → Fetch instruksi
Instruksi B → Load data

Keduanya membutuhkan akses ke resource memori yang sama.

Jika hardware hanya mampu melayani satu akses, terjadi konflik.

CPU kemudian harus membuat salah satu instruksi menunggu.

Bagaimana Structural Hazard Diatasi?

Ada beberapa pendekatan yang dapat digunakan.

Menambah Resource Hardware

Salah satu solusi adalah menyediakan resource tambahan.

Misalnya CPU memiliki lebih dari satu unit eksekusi sehingga beberapa instruksi dapat dikerjakan secara bersamaan.

Memisahkan Instruction dan Data Cache

Arsitektur tertentu dapat memisahkan cache instruksi dan cache data.

Dengan begitu, pengambilan instruksi dan akses data dapat dilakukan secara lebih independen.

Pipeline Stall

Jika resource tetap terbatas, CPU dapat menunda salah satu instruksi sampai resource tersebut tersedia.

Perbedaan Data Hazard, Control Hazard, dan Structural Hazard

Ketiga jenis hazard ini memiliki penyebab yang berbeda.

Jenis HazardPenyebabContoh MasalahPenanganan
Data HazardKetergantungan antar dataInstruksi membutuhkan hasil instruksi sebelumnyaForwarding, stall, register renaming
Control HazardPercabangan atau perubahan alur programCPU belum tahu instruksi berikutnyaBranch prediction, stall, flush
Structural HazardResource hardware terbatasDua instruksi membutuhkan unit yang samaTambah resource, desain hardware, stall

Cara mudah mengingatnya:

Data Hazard = masalah data

Control Hazard = masalah alur program

Structural Hazard = masalah resource hardware

Apa Itu Pipeline Stall?

Ketiga jenis hazard dapat menyebabkan pipeline stall.

Pipeline stall adalah kondisi ketika satu atau beberapa tahap pipeline harus menunggu sebelum dapat melanjutkan proses.

Misalnya:

Cycle 1 → Instruksi A
Cycle 2 → Instruksi B
Cycle 3 → STALL
Cycle 4 → Instruksi B

Stall membuat CPU tidak dapat menggunakan seluruh siklus secara produktif.

Karena itu, desain prosesor modern berusaha mengurangi jumlah stall sebanyak mungkin.

Apa Itu Pipeline Flush?

Selain stall, terdapat istilah pipeline flush.

Pipeline flush terjadi ketika instruksi yang sudah berada di pipeline harus dibatalkan.

Hal ini sering berkaitan dengan control hazard, terutama ketika branch prediction ternyata salah.

Contohnya:

CPU memprediksi:
A → B → C → D

Ternyata alurnya:
A → B → X → Y

Instruksi C dan D yang sudah terlanjur diproses harus dibatalkan.

CPU kemudian mengambil instruksi X dan Y.

Mengapa Hazard Penting dalam Desain CPU?

Hazard menjadi salah satu tantangan penting dalam desain mikroarsitektur prosesor.

CPU modern harus tetap menghasilkan hasil yang benar sekaligus berusaha menjalankan instruksi secepat mungkin.

Jika terlalu banyak stall atau flush, kemampuan pipeline tidak dapat dimanfaatkan secara maksimal.

Karena itu, prosesor menggunakan berbagai teknik seperti:

  • Forwarding
  • Branch prediction
  • Out-of-order execution
  • Register renaming
  • Multiple execution units
  • Cache
  • Speculative execution

Teknik-teknik tersebut bekerja bersama untuk mengurangi dampak hazard terhadap performa CPU.

Hubungan Hazard dengan Superscalar

Pembahasan hazard juga sangat berkaitan dengan superscalar processor.

Pada prosesor superscalar, CPU berusaha menjalankan beberapa instruksi secara paralel.

Namun, semakin banyak instruksi yang ingin dijalankan bersamaan, semakin penting bagi CPU untuk mendeteksi dependency dan konflik resource.

Misalnya:

Instruksi A → ALU 1
Instruksi B → ALU 2
Instruksi C → FPU
Instruksi D → Load/Store

Jika semua instruksi independen dan resource tersedia, beberapa instruksi dapat berjalan bersamaan.

Tetapi jika:

Instruksi A → menghasilkan R1
Instruksi B → membutuhkan R1

CPU harus memperhatikan data dependency tersebut.

Inilah salah satu alasan mengapa desain prosesor superscalar menjadi cukup kompleks.

Apakah Semua Hazard Selalu Menyebabkan Stall?

Tidak.

Ini merupakan hal yang penting untuk dipahami.

Hazard menunjukkan adanya potensi konflik, tetapi CPU memiliki berbagai mekanisme untuk mengatasinya tanpa selalu melakukan stall.

Contohnya, data hazard dapat ditangani menggunakan forwarding.

Sementara control hazard dapat dikurangi dengan branch prediction.

Sedangkan structural hazard dapat diminimalkan dengan menyediakan lebih banyak resource hardware.

Jadi, tujuan desain CPU bukan menghilangkan semua hazard secara mutlak, tetapi mengurangi dampaknya terhadap kinerja.

Hubungan Pipeline Hazard dengan Performa CPU

Pipeline hazard memiliki hubungan langsung dengan efisiensi CPU.

Semakin sering pipeline mengalami stall atau flush, semakin banyak siklus yang tidak digunakan secara optimal.

Secara sederhana:

Hazard sedikit
     ↓
Stall/Flush lebih sedikit
     ↓
Pipeline lebih lancar
     ↓
Throughput lebih tinggi

Sebaliknya:

Hazard banyak
     ↓
Stall/Flush meningkat
     ↓
Banyak siklus terbuang
     ↓
Throughput menurun

Inilah mengapa desain mikroarsitektur sangat penting dalam menentukan kemampuan sebuah prosesor.

Contoh Sederhana Ketiga Hazard

Agar lebih mudah diingat, berikut gambaran singkatnya.

Data Hazard

A = B + C
D = A + E

Instruksi kedua membutuhkan hasil instruksi pertama.

Masalah: ketergantungan data.

Control Hazard

if (A > B)
    X
else
    Y

CPU belum mengetahui jalur mana yang harus diambil.

Masalah: ketidakpastian alur program.

Structural Hazard

Instruksi A → Resource X
Instruksi B → Resource X

Dua instruksi membutuhkan resource yang sama.

Masalah: keterbatasan hardware.

Kesimpulan

Data hazard, control hazard, dan structural hazard merupakan tiga jenis utama masalah yang dapat mengganggu aliran instruksi pada pipeline prosesor.

Data hazard muncul karena adanya ketergantungan data antar-instruksi. Masalah ini dapat ditangani dengan teknik seperti forwarding, stall, dan register renaming.

Control hazard terjadi karena percabangan atau perubahan alur program. Branch prediction dan pipeline flush menjadi bagian penting dalam mengatasinya.

Sementara itu, structural hazard terjadi ketika beberapa instruksi membutuhkan resource hardware yang sama pada waktu yang bersamaan. Penambahan resource atau pengaturan pipeline dapat membantu mengurangi masalah tersebut.

Memahami ketiga hazard ini penting untuk mengetahui bagaimana CPU modern menjaga keseimbangan antara kecepatan, efisiensi, dan ketepatan eksekusi instruksi.

Setelah memahami pipeline hazard, pembahasan berikutnya bisa dilanjutkan ke topik branch prediction dan bagaimana CPU memprediksi arah percabangan untuk mengurangi control hazard.

By Rahena

Leave a Reply

Your email address will not be published. Required fields are marked *