18 / 24 · Konsep
Ketergantungan, hazard sumber daya, dan penerusan hasil
Bandingkan penundaan dan penerusan ketika operasi membutuhkan hasil sebelumnya.
Pelajaran dapat dibaca gratis. Daftar untuk menyimpan progres.
Tumpang tindih membutuhkan lebih dari pemeliharaan urutan
Perhitungan aliran yang independen tidak membaca hasil sebelumnya, sehingga transaksi dapat bertumpang tindih dengan aman. Sebaliknya, operator berkas register mungkin membutuhkan hasil operasi sebelumnya. Membaca register sebelum penulisan yang lebih lama tersedia menimbulkan hazard data baca-setelah-tulis. Aritmetikanya dapat benar sementara operandnya diambil terlalu dini.
Mulai dengan R1=4. Misalkan I0 melakukan R1←R1+3 dan I1 melakukan R2←R1×2. Dalam contoh ini, I0 menangkap operand 4 pada tepi 0, menghitung 7 selama siklus berikutnya, dan menulis R1 pada tepi 1. I1 yang mengambil sampel R1 pada tepi 1 mungkin melihat nilai lama 4, sehingga menghasilkan R2=8. Eksekusi berurutan membutuhkan R2=14. Tetapkan secara eksplisit perilaku baca/tulis berkas register pada tepi yang sama.
| Perbaikan | Operand yang dilihat I1 | Persyaratan |
|---|---|---|
| Baca R1 lama | 4 | Salah di sini |
| Tunda hingga tepi 2 | 7 | Pertahankan operasi dan bidang pendamping |
| Teruskan hasil eksekusi | 7 tepat sebelum tepi 1 | Hasil tersedia dan jalur memenuhi pewaktuan |
Penerusan memilih hasil yang telah dihitung sebelum mencapai penyimpanan arsitektural. Mencocokkan nomor tujuan saja tidak cukup: penghasil harus valid, benar-benar menulis register, dan memiliki hasil siap. Jika ada beberapa penghasil yang cocok, pilih operasi paling muda yang masih lebih lama daripada operasi penerima. Jangan pernah meneruskan gelembung atau operasi yang dibatalkan oleh pengosongan.
Operasi load yang responsnya belum tiba tidak dapat diperbaiki dengan meneruskan data yang belum tersedia. Tunda penerima sambil mempertahankan opcode, pengenal sumber, dan tag. Tentukan apakah tahap independen lain boleh terus berjalan.
Hazard struktural muncul ketika dua tahap membutuhkan satu port memori pada saat yang sama. Arbitrasi atau sumber daya tambahan diperlukan bahkan tanpa ketergantungan data. Percabangan menimbulkan hazard kendali yang memerlukan pembatalan pekerjaan pada jalur salah. Analisis apa yang ditunggu setiap operasi dan keadaan mana yang harus ditahan. Proyek akhir kita tetap berupa aliran independen; kelulusannya bukan bukti penanganan ketergantungan CPU.
Coba sendiri
Dengan R1=4, I0 menambahkan tiga dan I1 menggandakan hasilnya. Bandingkan hasil I1 dari penyimpanan lama dan penerusan yang benar. Bagaimana jika I0 adalah load yang datanya belum tersedia?
Baca penjelasan
Membaca 4 lama menghasilkan 8; meneruskan 7 menghasilkan 14. Hasil load yang belum tersedia memerlukan penundaan penerima dengan operasi dan tag yang tetap dipertahankan. Kecocokan tujuan tidak membenarkan penerusan data yang belum selesai.