Branch Prediction
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.
> DAta flow analysis
adalah suatu diagram yang menggunakan notasi-notasi untuk menggambarkan arus dari data sistem, yang penggunaannya sangat membantu untuk memahami sistem secara logika, tersruktur dan jelas. DFD merupakan alat bantu dalam menggambarkan atau menjelaskan sistem yang sedang berjalan logis.
Salah satu jenis dari arsitektur, dimana superscalar adalah sebuah uniprocessor yang dapat mengeksekusi dua atau lebih operasi scalar dalm bentuk paralel.
> SPACULATIVE EXECUTION
Merupakan salah satu rancangan untuk meningkatkan kecepatan CPU. Kebanyakan dari komputer saat ini menggunakan mekanisme superscalar ini. Standar pipeline yang digunakan adalah untuk pengolahan bilangan matematika integer (bilangan bulat, bilangan yang tidak memiliki pecahan), kebanyakan CPU juga memiliki kemampuan untuk pengolahan untuk data floating point (bilangan berkoma). Pipeline yang mengolah integer dapat juga digunakan untuk mengolah data bertipe floating point ini, namun untuk aplikasi tertentu, terutama untuk aplikasi keperluan ilmiah CPU yang memiliki kemampuan pengolahan floating point dapat meningkatkan kecepatan prosesnya secara dramatis.
Peristiwa menarik yang bisa dilakukan dengan metoda superscalar ini adalah dalam hal memperkirakan pencabangan instruksi (brach prediction) serta perkiraan eksekusi perintah (speculative execution). Peristiwa ini sangat menguntungkan buat program yang membutuhkan pencabangan dari kelompok intruksi yang dijalankankannya.
Program yang terdiri dari kelompok perintah bercabang ini sering digunakan dalam pemrograman. Contohnya dalam menentukan aktifitas yang dilakukan oleh suatu sistem berdasarkan umur seseorang yang sedang diolahnya, katakanlah jika umur yang bersangkutan lebih dari 18 tahun, maka akan diberlakukan instruksi yang berhubungan dengan umur tersebut, anggaplah seseorang tersebut dianggap telah dewasa, sedangkan untuk kondisi lainnya dianggap belum dewasa. Tentu perlakuannya akan dibedakan sesuai dengan sistem yang sedang dijalankan.
Lalu apa yang dilakukan oleh CPU untuk hal ini? Komputer akan membandingkan nilai umur data yang diperolehnya dengan 18 tahun sehingga komputer dapat menentukan langkah dan sikap yang harus diambilnya berdasarkan hasil perbandingan tersebut. Sikap yang diambil tentu akan diambil berdasarkan pencabangan yang ada.
Pada CPU yang mendukung perintah pencabangan ini, CPU membutuhkan lumayan banyak clock cycle, mengingat CPU menempatkan semuanya pada pipeline dan menemukan perintah berikutnya yang akan dieksekusinya. Sirkuit untuk branch prediction melakukan pekerjaan ini bekerja sama dengan pipeline, yang dilakukan sebelum proses di ALU dilaksanakan, dan memperkirakan hasil dari pencabangan tersebut.
Jika CPU berfikir bahwa branch akan menuju suatu cabang, biasanya berdasarkan pekerjaan sebelumnya, maka perintah berikutnya sudah dipersiapkan untuk dieksekusi berikut data-datanya, bahkan dengan adanya pipeline ini, bila tidak diperlukan suatu referensi dari instruksi terakhir, maka bisa dilaksanakan dengan segera, karena data dan instruksi yang dibutuhkan telah dipersiapkan sebelumnya.
Dalam hal speculative execution, artinya CPU akan menggunakan melakukan perhitungan pada pipeline yang berbeda berdasarkan kemungkinan yang diperkirakan oleh komputer. Jika kemungkinan yang dilakukan oleh komputer tepat, maka hasilnya sudah bisa diambil langsung dan tinggal melanjutkan perintah berikutnya, sedangkan jika kemungkinan yang diperkirakan oleh komputer tidak tepat, maka akan dilaksanakan kemungkinan lain sesuai dengan logika instruksi tersebut.
Teknik yang digunakan untuk pipeline dan superscalar ini bisa melaksanakan branch prediction dan speculative execution tentunya membutuhkan ekstra transistor yang tidak sedikit untuk hal tersebut.
Sebagai perbandingan, komputer yang membangkitkan pemrosesan pada PC pertama yang dikeluarkan oleh IBM pada mesin 8088 memiliki sekitar 29.000 transistor. Sedangkan pada mesin Pentium III, dengan teknologi superscalar dan superpipeline, mendukung branch prediction, speculative execution serta berbagai kemampuan lainnya memiliki sekitar 7,5 juta transistor. Beberapa CPU terkini lainnya seperti HP 8500 memiliki sekitar 140 juta transistor.
19.55
rizki.endika

