Meningkatkan Kinerja dengan Pipelining • Topik hari ini: Pipeline 5-tahap Hazard dan penjadwalan instruksi Prediksi branch Eksekusi out-of-order 1 Prosesor Siklus Ganda •Unit memori tunggal di-share oleh instruksi dan memori •ALU tunggal juga digunakan untuk memperbaharui PC •Register - register (latches) untuk menyimpan hasil setiap blok 2 Jalur Assembly Tanpa Pipeline Mulai dan akhir pekerjaan sebelum ke selanjutnya Pekerjaan Waktu A B A C B A C B A C B Memecah pekerjaan ke dalam tahapan yg lebih kecil C Dengan Pipeline 3 Peningkatan Kinerja? •Apakah membutuhkan waktu yg lebih lama untuk menyelesaikan masing - masing pekerjaan? •Apakah lebih cepat menyelesaian pekerjaan secara serial? •Asumsi apakah yang dibuat untuk menjawab pertanyaan pertanyaan diatas? •Apakah pipeline 10 tahap lebih baik dari pipeline 5 tahap? 4 Efek Kuantitatif •Dari hasil mem-pipeline: Waktu dalam ns per instruksi meningkat Setiap instruksi membutuhkan siklus yg lbh lama Tapi ... rata-rata CPI tetap sama (kurang lebih) Kecepatan clock meningkat Waktu eksekusi total meningkat, menghasilkan rata - rata waktu per instruksi yang lebih rendah Pada kondisi ideal = rasio dari waktu tempuh antara penyelesaian instruksi yang berurutan = jumlah tahap dari pipeline = peningkatan kec. clock 5 Sebuah pipeline 5 tahap 6 Sebuah Pipeline 5 Tahap Menggunakan PC untuk mengakses I-cache dan menambah PC dengan 4 7 Sebuah Pipeline 5 Tahap Membaca register, membandingkan register, menghitung target branch; utk sekarang diasumsikan branch membutuhkan 2 siklus (banyak pekerjaan yang membuat branch membutuhkan lebih dari itu) 8 Sebuah Pipeline 5 Tahap Komputasi ALU, komputasi address efektif untuk load / store 9 Sebuah Pipeline 5 Tahap Akses memori ke / dari data cache, store selesai dalam 4 siklus 10 Sebuah Pipeline 5 Tahap Menuliskan hasil dari komputasi ALU atau load ke berkas register 11 Konflik / Permasalahan •I-cache dan D-cache diakses pada siklus yang sama - akan membantu apabila diimplementasikan terpisah •Registers dimatikan dan ditulis dalam siklus yang sama mudah dihandle apabila register baca/tulis sama dengan waktu siklus / 2 (yang lainnya, memakai bypassing) •Target branch berubah hanya pada akhir dari tahap kedua -- apa yang akan dikerjakan diantaranya? •Data antar tahap di-latch ke register - register (overhead yang meningkatkan latensi (kelambatan) per-instruksi 12 Hazards / Bahaya •Hazard struktural: instruksi yang berbeda di tahap berbeda (atau tahap yg sama) berkonflik di sumber daya yg sama •Hazard data: sebuah instruksi tidak dapat berlanjut karena membutuhkan sebuah nilai yang belum dihasilkan dari instruksi sebelumnya • Hazard kontrol: fetch tdk dapat berlanjut karena tidak tahu keluaran dari branch sebelumnya - kasus khusus hazard • data - kategori terpisah karena ditangani secara berbeda 13 Hazard Struktural Contoh: sebuah gabungan instruksi dan data cache tahap 4 (MEM) dan tahap 1 (IF) tidak boleh bertabrakan • Instruksi yang kedua dan yg selanjutnya ditunda sampai sebuah siklus dimana sumber dayanya bebas ini adalah balon (bubble) pipeline • Hazard struktural mudah untuk dihilangkan - meningkatkan sumber daya (contohnya, implementasi cache instruksi dan data). • 14 Hazard Data 15 Bypassing •Beberapa kemacetan (stall) dari hazard data dapat dihilangkan: bypassing 16 Kemacetan karena Hazard Data 17 Kemacetan karena Hazard Data 18 Contoh add $1, $2, $3 lw $4, 8($1) 19 Contoh lw $1, 8($2) lw $4, 8($1) 20 Contoh lw $1, 8($2) sw $1, 8($3) 21 Hazard Kontrol •Teknik sederhana untuk menangani kemacetan karena hazard kontrol: untuk setiap branch, diperkenalkan sebuah siklus stall (catatan: setiap instruksi ke-6 adalah branch!) asumsi bahwa branch tidak diambil dan mulai fetch instruksi selanjutnya - jika branch terjadi, perlu perangkat keras utk membatalkan efek dari instruksi di jalur yg salah fetch instruksi selanjutnya (slot dari branch delay) dan tetap eksekusi - jika instruksi ternyata jalur yg benar, pekerjaan yg berguna telah terjadi - jika instruksi ternyata di jalur yg salah, diharapkan kondisi program tidak hilang 22 Slot dari branch delay 23 Perlambatan Karena Stall / Kemacetan Pipeline sempurna dengan tanpa hazard sebuah instruksi selesai setiap siklus (siklus total ~ jumlah instruksi) peningkatan = penambahan kec. clock = jml tahap pipeline • •Dengan hazard dan stall, beberapa siklus (= waktu stall) akan hilang dimana tidak ada instruksi yang selesai, kemudian instruksi yg kena stall akan selesai •Total siklus = jumlah instruksi + siklus yg stall 24 Pipeline tanpa Prediksi Branch IF (br) PC Reg Read Compare Br-target PC + 4 25 Pipeline dengan Prediksi Branch IF (br) PC Branch Predictor Reg Read Compare Br-target 26 Prediksi Bimodal 14 bits Branch PC Table of 16K entries of 2-bit saturating counters 27 Prediksi 2-Bit •Utk setiap branch, memelihara conter 2-bit tersaturasi: jika branch terjadi: counter = min(3,counter+1) jika branch tdk terjadi: counter = max(0,counter-1) … ada kemiripan dgn hal lainnya? •Jika (counter >= 2), diprediksi terjadi branch, yg lain tdk terjadi branch •Counter berusaha menangkap kasus umum dari setiap branch 28 Instruksi multi-siklus •Multiple paralles pipelines - setiap pipeline dapat memiliki tahap yg berbeda •Instruksi sekarang dapat selesai dengan urutan yang sembarang harus memastikan untuk menulis ke register dengan urutan yg benar 29 Implementasi dari Prosesor Urutan-Acak Buffer Reorder (ROB) Instr 1 Instr 2 Instr 3 Instr 4 Instr 5 Instr 6 Branch prediction and instr fetch R1 R1+R2 R2 R1+R3 BEQZ R2 R3 R1+R2 R1 R3+R2 Antrian Fetch Instruksi Decode & Rename T1 T2 T3 T4 T5 T6 T1 R1+R2 T2 T1+R3 BEQZ T2 T4 T1+T2 T5 T4+T2 Register File R1-R32 ALU ALU ALU Hasil ditulis di ROB dan tag-nya di-broadcast ke IQ Antrial Issue (IQ) 30