Selasa, 06 Desember 2011

Branch prediction

Cabang Prediksi

Sebelumnya: Pipelining Next: Superscalar
Untuk membuat pipelining bekerja secara efisien, perlu untuk menjaga semua tahapan penuh. Namun, ada masalah setiap kali instruksi ditemui yang mengubah aliran sekuensial kontrol dalam program. Jika laporan, laporan loop, dan laporan prosedur menyebabkan masalah dengan pipa. Perhatikan kode berikut,
if (x> 0) {a = 0;
b = 1;
c 2 =;
}
d 3 =;

Siklus Ambil Decode Jalankan Simpan
1 if (x> 0)
2 a 0 = jika (x> 0)
3 b = 1 a = 0 jika (x> 0)
4 c = 2 b = 1 a = 0 jika (x> 0)
5 c = 2 b = 1 a = 0
6 c = 2 b = 1
7 c = 2

Jika x lebih besar dari 0, maka instruksi di dalam pipa benar, karena tubuh jika pernyataan akan mendapatkan dieksekusi.


Siklus Ambil Decode Jalankan Simpan
1 if (x> 0)
2 a 0 = jika (x> 0)
3 b = 1 a = 0 jika (x> 0)
4 d = 3 b = 1 squash squash a = 0 jika (x> 0)
5 d = 3 b = 1 squash squash a = 0
6 d = 3 b = 1 squash
7 d = 3

Namun, jika x kurang dari atau sama dengan 0, maka tubuh jika tidak akan dieksekusi. Dalam hal ini, instruksi berikutnya dalam pipa harus d = 3, dan petunjuk yang melibatkan a, b, dan c tidak boleh di dalam pipa. Dalam hal ini, akan diperlukan untuk membatalkan efffects bahwa instruksi telah tentang keadaan prosesor, dan untuk menghapus instruksi dari pipa. Ini dikenal sebagai squashing instruksi. Dengan asumsi bahwa ini bisa dilakukan, maka instruksi d = 3 akan diambil pada awal siklus 4, pada saat hasil perbandingan x> 0 dikenal. Dalam kasus ini, pipa kurang efisien, karena beberapa tahapan yang tidak digunakan untuk menjalankan instruksi yang valid. Ini akan mengambil 7 siklus untuk menyelesaikan dua petunjuk.

Siklus Ambil Decode Jalankan Simpan
1 if (x> 0)
2 d = 3 if (x> 0)
3 d = 3 if (x> 0)
4 d = 3 if (x> 0)
5 d = 3

Jika hal itu mungkin untuk melihat ke masa depan, dan untuk mengetahui apa hasil perbandingan akan, maka akan mungkin untuk menjaga pipa penuh. Misalnya, jika hal itu diketahui terlebih dahulu bahwa hasil perbandingan akan salah, maka komputer bisa memuat instruksi d = 3 bukan instruksi a = 0. Jika ini terjadi, maka kedua instruksi akan mengambil hanya 5 siklus.

Ini adalah ide di balik prediksi cabang. Cobalah untuk menebak depan waktu yang cara instruksi cabang akan pergi. Jika menebak benar, maka pipa akan tetap penuh. Jika salah menebak, maka squashing beberapa akan terjadi dan pipa akan kurang efisien. Hal ini mungkin untuk mendapatkan 90% dari tebakan yang benar menggunakan prediksi cabang.

Tidak ada komentar:

Posting Komentar