Saya telah mengamati bahwa ada dua jenis negara dalam prediksi cabang.
Dalam eksekusi superscalar, di mana prediksi cabang sangat penting, dan terutama dalam penundaan eksekusi daripada mengambil penundaan.
Dalam pipa instruksi, di mana pengambilan lebih banyak masalah karena instruksi tidak benar-benar dieksekusi sampai nanti.
Manakah dari ini yang sangat penting (seperti yang mana yang benar-benar penting dalam CPU sekarang-a-hari)? Jika keduanya sama-sama penting atau seandainya yang kedua lebih penting maka Mengapa kita tidak memiliki dua pipa instruksi (mungkin setengah panjangnya) dan kemudian tergantung pada cabang-cabang, cukup pilih salah satu dari mereka dan kemudian mulai lagi populasi dari awal?
Jawaban:
Saya tidak tahu kasus mana yang lazim, tetapi saya ingin menawarkan beberapa pemikiran tentang proposal Anda tentang jalur pipa ganda.
Pertama-tama, Anda perlu menggandakan kawat yang akan mengkonsumsi dua kali lipat energi dan menghasilkan panas dua kali lipat saat aktif. Meskipun tidak diperlukan, di sisi lain, itu akan sama sekali tidak berguna. Jadi orang dapat berargumen bahwa itu bukan penggunaan sumber daya yang baik yang jarang terjadi pada prosesor modern.
Lebih mendasar lagi, kecuali Anda lebih suka satu cabang berdasarkan probabilitas, bagaimana Anda tahu versi mana yang harus ditulisi? Jika tidak ada, Anda mungkin tidak menyimpan apa pun karena prosesor lain mungkin harus menunggu keputusan Anda. Jika Anda tetap menggunakan salah satu dari mereka, pada dasarnya Anda memiliki kemungkinan rollback dan biaya yang sama dengan yang Anda miliki sekarang.
sumber
Di satu sisi, efek prediksi cabang lebih penting dalam pengambilan instruksi karena instruksi yang tidak diambil tidak dapat dieksekusi.
Sehubungan dengan mengeksekusi kedua jalur cabang, ini disebut eksekusi bersemangat dan telah diteliti agak substansial. Augustus K. Uht dan Vijay Sindagi "Eksekusi Disjoint Eager: Suatu Bentuk Optimal Eksekusi Spekulatif" (1995) mungkin layak untuk dilihat.
Eksekusi yang bersemangat memiliki beberapa masalah. Untuk spekulasi mendalam, jumlah jalur yang harus dilacak dapat tumbuh secara eksponensial (setiap jalur cabang bercabang mungkin menghadapi cabang). Prediksi cabang juga sering sangat akurat (> 90% benar), jadi selalu mengeksekusi kedua jalur akan sia-sia. Eksekusi yang cepat juga dapat "mencemari" cache dengan konten yang tidak berguna. (Makalah yang disebutkan di atas mengusulkan eksekusi bersemangat terbatas untuk menghindari beberapa masalah ini.) Terbatas bersemangat mengambil jalan alternatif memiliki lebih sedikit masalah dan dapat agak menarik dalam mengurangi keterlambatan pemulihan misprediksi dalam pipa pendek.
Pendekatan lain yang telah diusulkan adalah secara dinamis memprediksi cabang "hammock" (cabang maju pendek yang bergabung kembali ke jalur utama aliran instruksi). Artur Klauser et al. "Dynamic Hammock Predication untuk Arsitektur Set Instruksi Non-predicated" (1998) mungkin layak dibaca untuk ide itu. (Hyesoon Kim et al. "Cabang Harapan: Menggabungkan Percabangan Bersyarat dan Predikasi untuk Eksekusi Eksekusi Adaptif" mengusulkan penambahan cabang ISA yang memfasilitasi predikasi tempat tidur gantung dan memperluas metode predikasi ini ke cabang loop yang sulit diprediksi.)
sumber