Prediksi cabang mana yang lebih penting?

11

Saya telah mengamati bahwa ada dua jenis negara dalam prediksi cabang.

  1. Dalam eksekusi superscalar, di mana prediksi cabang sangat penting, dan terutama dalam penundaan eksekusi daripada mengambil penundaan.

  2. 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?

Kaveh
sumber
1
Mungkin keduanya penting, tergantung situasinya?
Raphael

Jawaban:

6

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.

C=c+p(cr+c)cpcr2c2c+pcrCpcrpt+p(tr+t)tt+ptrp

Raphael
sumber
Sejauh yang saya tahu, Intel telah mencoba "membaca instruksi untuk kedua sisi cabang" dan bahkan "menjalankan instruksi untuk kedua sisi cabang", dan berhenti melakukannya. Entah karena tidak mendapatkan apa-apa, atau karena biaya dan kompleksitasnya begitu tinggi sehingga mereka bisa mendapatkan lebih banyak keuntungan dengan cara yang berbeda dengan biaya yang sama.
gnasher729
@ gnasher729 Dan itu mungkin sebelum kita mengetahui tentang kelemahan keamanan terkait dengan fitur seperti ini?
Raphael
2

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.)

Paul A. Clayton
sumber
Itu jawaban yang sangat bagus! Terima kasih. :-)