Wednesday 4 October 2017

Very-Long Instruction Word (VLIW) Computer Architecture

The Basic Idea of VLIW

Ide awal dari VLIW adalah adanya komputasi paralel Alan Turing pada tahun 1946 dan Maurice Wilkes pada tahun 1951 saat melakukan pekerjaan microprogramming. CPU Microprogrammed memiliki macroinstruction yang sesuai dengan setiap instruksi program. Masing-masing macroinstructions memiliki urutan yang sesuai microinstructions dan disimpan dalam ROM pada CPU. Microinstructions ini dapat di-order di dalam set yang luas dari sinyal kontrol. Hal ini dinamakan microprogramming horisontal.

Ketika Joseph Fisher bekerja menulis microcode horisontal untuk emulator-6600 CDC pada tahun 1979, ia mulai
memikirkan teknik untuk menghasilkan instruksi yang panjang dari sekuensial yang singkat. Teknik-teknik yang dikembangkan, disebut "jejak penjadwalan", sangat penting untuk menghasilkan kode VLIW yang kompatibel.

Pada tahun 1984, Fisher dan rekan
-rekannya dari Universitas Yale membentuk Multiflow, dengan tujuan menciptakan superkomputer VLIW. Cydrome juga dibentuk pada tahun itu oleh Bob Rau. Meskipun mereka berdua merilis produk jadi tersebut, ternyata pasar tidak siap dan teknologi yang ada juga belum lengkap. Dengan demikian, perusahaan tidak berhasil meraih banyak kesuksesan komersial. Tapi mereka terus menyempurnakan teknologi VLIW, dan kedua pendiri sekarang membawa keahlian mereka untuk Hewlett-Packard Labs, yang telah menghasilkan mesin penelitian playdoh [PDF].

Setelah perusahaan-perusahaan perintis menghilang, hanya sedikit pengembangan yang tampaknya terjadi pada VLIW, sampai insinyur menemukan arsitektur yang ideal untuk perhitungan cepat yang kompleks dan algoritma yang berulang. Jadi munculnya kembali VLIW datang dengan gelombang baru pada chip media pengolahan, dipimpin oleh MPact Chromatic dan Philips Trimedia, yang menyebabkan perkembangan dari implementasi VLIW pertama telah benar-benar terbuka dan sukses: Texas Instruments seri C6X, yang dibahas lebih rinci dalam makalah ini.

Keberhasilan besar chip TI DSP
telah membuka jalan bagi generasi baru skala besar desain mikroprosesor VLIW. Pada tahun 2000, startup Transmeta merilis keluarga VLIW berbasis prosesor Crusoe, yang dirancang khusus untuk pengolahan daya rendah di perangkat embedded. Intel mengikuti dengan spesifikasi 64-bit arsitektur, IA-64, dan dilanjutkan dengan Itanium chip.

Munculnya VLIW adalah masalah teknologi yang tepat tersedia pada waktu yang tepat. Pada 1970-an, VLIW hampir
tidak dapat diimplementasikan karena sifat mahal dari memori pada saat itu. Prosesor CISC dapat dibuat dengan menggunakan hingga paling sedikit delapan bit untuk instruksi sederhana, sehingga menjadi teknologi pilihan. Pada 1990-an, memori telah menjadi murah, dan VLIW adalah sebuah solusi yang layak.

Hingga pertengahan tahun 1990, belum pernah terjadi pabrikasi teknologi IC yang cukup maju untuk menjalankan implementasi dari arsitektur komputer pada satu chip. Selain itu, tingkat kemajuan proses memungkinkan implementasi untuk ditingkatkan pada tingkat yang memuaskan untuk sebagian besar pasar yang dilayani. Secara khusus, para vendor mikroprosesor bersaing dalam hal soket pada komputer desktop (termasuk workstation) dengan mendorong kecepatan dari clock rate dan eksekusi paralel.
 
Pasar untuk mikroprosesor desktop terbukti sangat dinamis.
Secara khusus, pasar x86 telah mengejutkan banyak pengamat dengan tingkat kinerja dan pencapaian harga per-kinerja tingkat yang banyak orang mengira berada di luar jangkauan. Alasan untuk pesimisme pada x86 adalah karena arsitektur (instruksi set-nya). Memang, dengan munculnya arsitektur RISC, x86 kini diakui sebagai satu set dengan sedikit instruksi.
 
Kompatibilitas instruksi set adalah jantung dari pasar mikroprosesor desktop. Karena program aplikasi yang disampaikan pengguna akhir dalam bentuk biner (langsung dieksekusi oleh mikroprosesor), keinginan pengguna akhir 'untuk melindungi investasi perangkat lunak mereka menciptakan instruksi-set dengan pembatas yang luar biasa.

Ada pasar yang berbeda,  yang lebih kurang terpengaruh oleh instruksi-set inersia. Pasar ini biasanyanya disebut pasar embedded, dan hal ini ditandai dengan produk yang mengandung software yang diinstal pada pabrikasi yang berjalan dalam bentuk  set instruksi mikroprosesor, yang tidak mudah jelas bagi pengguna akhir. Meskipun vendor produk yang mengandung mikroprosesor memiliki investasi dalam software yang tertanam, seperti pengguna akhir dengan aplikasi mereka, ada kebebasan yang jauh lebih menguntungkan dari migrasi perangkat lunak yang tertanam ke mikroprosesor baru dengan satu set instruksi yang berbeda. Untuk mengatasi hal ini, pada tingkat yang lebih rendah dari instruksi-set, yang dibutuhkan adalah satu set cukup baik karakteristik pelaksanaan, sangat mutlak kinerja dan / atau harga-performa.

Tingkat yang lebih rendah dari instruksi-set memberikan vendor mikroprosesor kebebasan dan inisiatif untuk mencari set instruksi baru. Keberhasilan mikroprosesor RISC pada pasar high-end adalah contoh inovasi oleh vendor mikroprosesor yang menghasilkan manfaat yang besar cukup untuk mengatasi inersia pasar. Untuk kekecewaan vendor ', manfaat RISC belum cukup untuk mengatasi kekurangan instruksi-set dari pasar komputer desktop mainstream.


Karena kemajuan dalam teknologi fabrikasi IC dan kemajuan dalam
teknologi tingkat tinggi pada bahasa compiler, sekarang muncul bahwa vendor mikroprosesor yang dipaksa mengikuti perubahan instruksi set mikroprosesor. Arah baru dalam arsitektur mikroprosesor adalah menuju instruksi set VLIW (instruksi kata yang sangat panjang). Arsitektur VLIW dicirikan oleh petunjuk bahwa beberapa operasi ditentukan secara independen. Hal ini dibandingkan dengan instruksi RISC yang biasanya menentukan satu operasi dan instruksi CISC yang biasanya menentukan beberapa operasi yang lebih singkat. Instruksi VLIW yang tentu lebih lama dari RISC atau CISC, sesuai dengan namanya.




Gambaran Singkat VLIW

Arsitektur VLIW berbeda dengan arsitektur RISC dan CISC yang diimplementasikan pada mass-market mikroporosesor sekarang. Sangatlah penting untuk membedakan arsitektur instruction-set, model pemrograman prosesor, implementasinya, bentuk fisik chip, dan karakterisitknya.

Implementasi mikroprosesor VLIW dan superscalar pada instruction set memiliki beberapa karakteristik, yaitu memiliki banyak execution unit dan kemampuan untuk mengeksekusi beberapa operasi secara serentak. Teknik inilah yang digunakan untuk mendapatkan performa yang tinggi, namun keduanya memiliki perbedaan dimana tingkat paralelisme secara eksplisit berada pada VLIW instruction, tetapi pada prosesor supersalar harus ditemukan pada saat run time oleh hardware.

Implementasi dari VLIW lebih mudah untuk mecapai performa yang sangat tinggi. Seperti halnya arsitektur RISC yang memiliki implementasi performa tinggi yang lebih mudah dan lebih murah dibandingkan dengan CISC. Namun, arsitektur VLIW membutuhkan lebih banyak support dari compiler.


Mengapa VLIW

Kunci untuk mencapai performa tinggi pada microprosesor untuk berbagai macam aplikasi adalah dengan memiliki kemampuan untuk mendapatkan fine-grain, instruction-level parallelism. Beberapa metode untuk mendapatkan fine-grain parallelism adalah:
+ pipelining
+ multi prosesor
+ implementasi superscalar
+ penentuan beberapa operasi independen per instruksi

Pipelining sekarang diimplementasikan secara universal pada prosesor high-performance.
           
Penggunaan multi prosesor hanya meningkatkan performa yang terbatas pada aplikasi tertentu saja.  

Implementasi superscalar dapat meningkatkan performa untuk semua jenis aplikasi. Superscalar adalah kemampuan untuk fetch, issue ke unit eksekusi, dan complete lebih dari satu instruksi  pada suatu waktu.

Menentukan beberapa operasi per instruksi menciptakani sebuah arsitektur very-long instruction word atau VLIW. Implemementasi dari VLIW memiliki kemampuan yang sangat mirip dengan prosesor superscalar, issue dan complete lebih dari satu operasi pada suatu waktu, dengan satu pengecualian penting: Hardware VLIW tidak bertanggungjawab untuk menemukan kemungkinan untuk meneksekusi beberapa operasi secara serentak. Pada implementasi VLIW, long instruction word telah diencode sebagai operasi yang serentak. Pengkodean secara eksplisit menyebabkan pengurangan yang besar terhadap kompleksitas hardware dibandingkan dengan implemetasi high-degree supersclalar pada RISC atau CISC.

Keuntungan utama dari VLIW adalah implementasi peneksekusian operasi yang benar benar serentak (paralel) namun lebih murah dan simple daripada membuat prosesor superscalar yang setara pada RISC atau CISC.



Perbedaan Tingkat Pararelisme 

Peningkatan dari kinerja prosesor berasal dari dua sumber utama: teknologi semikonductor yang lebih cepat dan pemrosesan paralel. Pemrosesan paralel pada multiprosesor, multikomputer dan cluster prosesor melibatkan usaha pemrograman yang tinggi dalam pembentukan sebuah algoritma pemetaan untuk sehingga dapat meningkatkan kinerja untuk mengeksekusi multiprosesor atau multithread.

Hal ini menyebabkan pengembangan pada prosesor dengan paralel pada tingkat instruksi / Instruction Level Parallel (ILP) yang mencoba untuk meningkatkan kecepatan pengeksekusian program dengan melakukan overlapping ekskusi dari banyak instruksi yang dibentuk dari program sekuensial.

Sebuah simple prosesor yang melakukan ferch dan eksekusi satu instruksi pada suatu waktu disebut sebuah simple scalar processor. Sebuha prosesor dengan banyak function unit memiliki potensi untuk mengeksekusi beberap operasi secara paralel. Jika keputusan tentang operasi mana yang akan dieksekusi secara overlap dibuat pada saat runtme hardware, disebut prosesor superscalar. 

Tipe yang lain dari prosesor ILP tergantung dari cara untuk perencanaan eksekusi yang diturunkan, namun secara tipikal melibatkan kedua peran dari compiler dan hardware. Di dalam pengembangan prosesor berkinerja tinggi seperti Intel Pentium dan MIPS R18000, compiler mencoba untuk menemukan paralelisme untuk prosesor dengan menggunakan beberapa optimasi. Hasil jadi dari optimasi ini adalah untuk meletakkan sebanyak mungkin operasi independen sedekat mungkin didalam aliran instruksi. Pada saat runtime, prosesor melakukan pengecekan instruksi pada suatu waktu, menganalisa ketergantungan diantara instruksi dan tetap menjaga ketersediaan data dan resource hardware pada setiap instruksi. Prosesor mencoba untuk melakukan penjadwalan pada setiap instuksi sehingga data dan function unit dapat tersedia sesegera mungkin.  

Joseph Fisher, orang yang membuat singkatan VLIW, dikategorikan sebagai mesin yang memiliki arsitektur dimana melakukan issue terhadap satu instruski yang panjang pada per siklus, dimana setiap instruksi yang panjang disebut sebagai MultiOp terdiri dari beberapa operasi independen dimana dieksekusi pada sejumlah kecil siklus dan secara statis dapat diprediksi siklusnya.  Ini sebagai acuan untuk pengembangan implementasi porsesor yang lebih cepat dan simple.



Sejarah Singkat VLIW Processor 

Untuk berbagai macam alasan pada saat itu, komputer pada awalnya didesain untuk memiliki intruksi yang benar benar rumit. Instuksi ini membuat proses disain dari control cicuit pada komputer menjadi sulit. Solusi dari masalah ini adalah microprogramming, sebuah teknik yang diajukan oleh Maurice Wilkes pada tahun 1951. Di dalam sebuah micro programmed CPU, setiap instruksi program dianggap sebagai sebuah instruksi macro yang kana dieksekusi oleh simple porsesor yang ada di CPU.

Horizontal microprogramming adalah salah satu cara dari microprogramming dimana bit-bit di dalam sebuah wide microinstruction secara langsung digunakan untuk control signal di dalam prosesor. Berbeda jauh dengan vertical microprogramming yang menggunakan microinstruction yang lebih singkat atau serangkaian microinstruction dengan kombinasi dari beberapa logika decoding untuk memciptakan control signal. Microprogramming menjadi teknik yang populer dalam implementasi control unit pada prosesor setelah IBM mengadopsinya untuk komputer seri System/360.

Joseph Fisher, seorang pionir datri VLIW, ketika berkerja untuk PUMA, pada emulator CDC-6600, telah putus asa karena kesulitan untuk menulis dan maintain 64 bit horizontal microcode pada prosesor itu.

Dia mulai melakukan investigasi pada sebuah teknik untuk melakukan pemadatan global microcode, yaitu sebuah metode untuk melakukan generate long horizontal microcode instruction dari runtunan yang singkat. Kemudian Fisher menyadari bahwa teknih yang dikembangkannya pada tahun 1979, yang disebut trace scheduling, dapat digunakan pada compiler untuk melakukan generate code untuk arsitektur seperti VLIW dari sumber yang sekuensial, karena paralelisme tersedia pada VLIW yang memiliki cara yang sangan mirip dengan horizontal microcode. Penemuannya mengacu untuk pengembangan deasin prosesor ELI-512 prosesor dan Bulldog trace-scheduling compiler.  

Dua perusahaan yang didirikan pada 1984 bertujuan untuk membangun mini supercomputer berbasis VLIW. Salah satunya adalah Multiflow, dibangun oleh Fisher dan teman kuliahnya dari Yale University. Satunya lagi adalah Cydrome yang dibangun oleh pionir VLIW Bob Rau dan teman kuliahnya. Gambar 1 menunjukkan sosok Joseph Fisher dengan komputer MultiFlow.

Pionir VLIW Joseph Fisher disamping MultiFlow

Sejak saat itu, prosesor VLIW telah bangkit dan mendapatkan  kesusksesan pada beberapa bagian. Beberapa prosesor VLIW baru-baru ini adalah IA-64 atau Itanium dari Intel, Prosesor Crusoe dari Transmeta, Trimedia media-prosesor dari Phillips dan seri TMS320C62x dari Texas Instrument.




Perbandingan Arsitektur: CISC, RISC, AND VLIW

Pada perspektif yang lebih luas, RISC, CISC, dan arsitektur VLIW memiliki lebih banyak kesamaan daripada perbedaan. Perbedaan yang ada, bagaimanapun, memiliki efek mendalam pada implementasi dari arsitektur ini.

Arsitektur ini secara umum menggunakan model dari mesin perhitungan tradisional: Setiap instruksi membuat perubahan bertahap pada kondisi (memori, register) dari komputer, dan perangkat keras mengambil dan mengeksekusi instruksi secara berurutan sampai sebuah cabang instruksi mengubah aliran dari kontrol. Perbedaan antara RISC CISC dan VLIW dapat dilihat pada Tabel dibawah ini.

Perbandingan Arsitektur CISC RISC VLIW

Perbedaan antara RISC, CISC, dan VLIW adalah pada format dan semantik dari instruksi. Instruksi CISC memiliki variasi dalam ukuran yang menentukan urutan operasi, dan terkadang memerlukan serial algoritma decoding (lambat). CISC biasanya memiliki beberapa register yang  memiliki tujuan khusus untuk membatasi cara-cara tertentu agar dapat dapat digunakan. Referensi memori biasanya dikombinasikan dengan operasi lain (seperti menambah memori untuk register). Instruksi CISC yang dirancang untuk memanfaatkan microcode.

Instruksi RISC yang digunakan untuk menjalankan operasi yang sederhana biasanya memiliki ukuran yang tetap dan cepat dalam memecahkan kode. Arsitektur RISC memiliki jumlah register yang relatif besar. Instruksi dapat mereferensikan memori utama hanya melalui operasi load-register-from-memory -dan store-register-to-memory. Set instruksi RISC tidak memerlukan microcode dan dirancang untuk menyederhanakan pipelining.

Instruksi VLIW menyerupai instruksi RISC, perbedaannya adalah VLIW lebih lama untuk memungkinkan instruksi menentukan beberapa operasi sederhana yang independen. Sebuah instruksi VLIW dapat mewakili sebagai beberapa instruksi RISC yang digabungkan. Arsitektur VLIW cenderung seperti RISC pada sebagian besar atributnya.

Gambar dibawah ini menunjukkan sebuah fragmen kode bahasa-C yang mengandung sebuah definisi fungsi yang kecil. Fungsi ini menambahkan variabel lokal pada parameter yang lolos dari pemanggil fungsi. Digambarkan pula penerapan fungsi ini dalam kode CISC, RISC, dan VLIW. Contoh ini menunjukan ketimpangan antara RISC dan mesin VLIW dan gambaran perbedaan arsitekturnya.

Implementasi Fungsi dari CISC RISC dan VLIW

Kode CISC terdiri dari satu instruksi karena arsitektur CISC memiliki instruksi penambahan (add) yang dapat mengkodekan alamat memori untuk suatu tujuan tertentu. Jadi, instruksi CISC menambahkan variabel lokal dari register r2 ke parameter berbasis memori. Instruksi pengkodean CISC ini biasanya mengambil empat byte pada beberapa mesin hipotetis.

Kode RISC secara artifisial tidak efisien. Biasanya, kompiler yang baik akan melewatkan parameter dalam register, yang akan membuat kode RISC hanya terdiri dari satu instruksi penambahan register-ke-register. Namun pada ilustrasi, kode tersebut terdiri dari tiga instruksi seperti yang ditunjukkan. Ketiga petunjuk memuat parameter ke register, menambahkannya ke dalam variabel lokal yang sudah berada di register, kemudian menyimpan hasilnya kembali ke memori. Setiap instruksi RISC membutuhkan empat byte.

Kode VLIW juga sama terhambat karena kesulitan pada alokasi register. Contoh dari arsitektur VLIW menunjukkan bahwa VLIW memiliki kemampuan untuk secara bersamaan mengeluarkan tiga instruksi. Slot pertama (kelompok empat byte) untuk intruksi percabangan, slot tengah untuk instruksi ALU, dan slot terakhir untuk unit load / store.

Diperlukan tiga operasi RISC pada implementasi untuk dilaksanakan pada penggalan kode yang tidak independen, dan tidak mungkin digunakan untuk memasukan beban dan menambahkannya ke dalam instruksi VLIW yang sama. Dengan demikian, diperlukan tiga instruksi VLIW yang terpisah.

Untuk lebih akurat, Dengan penggalan kode seperti yang ditunjukkan, instruksi VLIW secara mendalam tidak efisien dari sudut pandang pemanfaatan kode. Dalam pemrograman, compiler VLIW menggunakan teknik optimalisasi pada beberapa program untuk mengisi tiga slot dengan tiga instruksi yang berbeda untuk mencapai performansi terbaik pada setiap mesin dalam menjalankan kode tersebut. Hal ini Ini adalah pelajaran untuk merenungkan kinerja setiap mesin dapat mencapai untuk kode ini. Kita perlu berasumsi bahwa setiap mesin memiliki penerapan pipelined yang efisien.

Sebuah mesin CISC seperti 486 atau Pentium dapat menjalankan penggalan kode dalam tiga siklus.
Sebuah mesin RISC mampu mengeksekusi penggalan kode dalam tiga siklus dan siklus tersebut kemungkinan akan lebih cepat dari pada siklus CISC.

Untuk lebih akurat, kita asumsikan alokasi regiter yang baik  yang ditunjukkan pada Gambar dibawah ini. Contoh ini mungkin memberikan mesin CISC sedikit lebih banyak keuntungan karena tidak mungkin untuk mengalokasikan paramater ke register sesering mungkin pada RISC dan VLIW. 

Implementasi Fungsi dari CISC RISC dan VLIW dengan alokasi register

Mesin CISC dan RISC dengan alokasi register yang baik akan menmerlukan satu siklus untuk  insttruksi register-ke-register, namun sekarang ukuran kode RISC sama dengan CISC.Mesin VLIW, diasumsikan memiliki keseluruhan dari tiga-paket instruksi, akan secara efektif mengeksekusi penggalan kode dalam satu siklus. Untuk melihatnya, kita dapat mengamati penggalan kode yang membutuhkan tiga dari sembilan slot dan menggunakan sepertiga sumber daya. Sepertiga dari tiga siklus tersebut adalah satu siklus.

Perhatikan bahwa perbandingan ini adalah antara skalar (satu instruksi per siklus maksimum), dengan implementasi RISC dan CISC, dan VLIW yang relatif sempit. Meskipun akan lebih realistis untuk membandingkan superscalar RISC dan CISC terhadap arsitektur VLIW yang lebih luas, namun perbandingan tersebut akan lebih rumit. Cukuplah untuk mengasumsikan bahwa kesimpulan perbandingan akan kira-kira sama.



Perbandingan Implementasi CISC, RISC, dan VLIW

Perbedaan antara arsitektur  CISC, RISC, dan VLIW terdapat dalam implementasinya masing-masing. Membandingkan implementasi berkinerja tinggi dari masing-masing arsitektur adalah yang paling tepat.

Desain RISC dan CISC berkinerja tinggi disebut implementasi superscalar. Superscalar dalam konteks ini berarti "skalar luar" di mana skalar berarti satu operasi pada satu waktu. Dengan demikian, superscalar berarti lebih dari satu operasi pada satu waktu.

Pada CISC atau RISC, untuk mencapai tingkat kinerja yang lebih tinggi daripada yang diberikan oleh pipeline tunggal, kita harus membangun implementasi superscalar. Sifat dari implementasi superscalar adalah bahwa superscalar mengambil, menampilkan, dan menyelesaikan lebih dari satu instruksi CISC atau RISC per siklus.

Gambar 4 menunjukkan sebuah high-level block diagram mentah dari implementasi prosesor superscalar  RISC dan CISC.  Pada implementasinya terdiri dari sekumpulan unit ekseskusi (integer ALU, floating-point ALU, load/store unit, branch unit, dll) yang mendapatkan operasi dari instruction dispatcher dan operand dari sebuah file register.

Unit-unit eksekusi memiliki reservation station untuk melakukan buffer pada operasi yang menunggu yang telah di issue namun belum di eksekusi. Operasi menunggu operand yang masih belum tersedia. Instruction dispatcher memeriksa sebuah window pada instrusksi pada buffer. Ditpatcher mencari instruksi pada window dan memutuskan yang mana yang dapat didispatch ke execution unit. Dispatcher mencoba untuk melakukan dispatch sebanyak mungkin secara sekaligus.
Diagram implementasi prosesor superscalar RISC dan CISC

Pada implementasi superscalar berperforma tinggi, meminimalkan ukuran kode akan membatasi kinerja implementasi superscalar yang dapat dicapai. Kinerja menjadi terbatas karena seringnya meminimalkan ukuran hasil kode pada cabang kondisional di setiap enam instruksi. Secara konseptual, prosesor harus menunggu sampai cabang diselesaikan sebelum dapat memulai kembali untuk mencari paralelisme pada setiap cabang.

Untuk menghindari menunggu cabang
yang bersyarat untuk diselesaikan, implementasi superscalar berkinerja tinggi mengimplementasikan prediksi percabangan. Dengan prediksi percabangan, prosesor membuat dugaan awal tentang hasil percabangan dan mulai mencari paralelisme sepanjang jalur yang diprediksi. Tindakan pengiriman dan melaksanakan eksekusi alur instruksi dari suatu prediksi-tapi belum dikonfirmasi- disebut eksekusi spekulatif.

Sayangnya, cabang prediksi tidak 100% akurat. Walaupun demikian, pada eksekusi spekulatif, adalah perlu untuk membatalkan efek instruksi spekulatif yang dieksekusi pada kasus dari cabang yang salah terprediksi. Beberapa implementasi, seperti Intel superscalar Pentium, hanya mencegah petunjuk sepanjang jalan diprediksi dari kemajuan cukup jauh untuk memodifikasi kondisi prosesor, namun untuk mendapatkan yang hasil terbaik dari eksekusi spekulatif, perlu untuk memungkinkan petunjuk sepanjang jalan yang diprediksi agar dapat dieksekusi sepenuhnya.

Untuk dapat membatalkan efek penuh dari eksekusi spekulatif, struktur hardware yang disebut reorder buffer dapat digunakan. Struktur ini merupakan tambahan ke file register yang akan melacak semua hasil yang diperoleh dari instruksi yang baru saja dieksekusi atau yang telah dikirim ke unit eksekusi, tetapi belum terselesaikan. Reorder Buffer menyediakan tempat bagi hasil instruksi untuk secara spekulatif dieksekusi (dan memecahkan masalah lain). Ketika cabang kondisional diselesaikan, hasil dari instruksi spekulatif yang dieksekusi dapat berupa turunan dari reorder buffer atau penulisan dari buffer ke file register (apabila percabangan telah diprediksi secara benar).
Perbedaan utama antara implementasi superscalar berkinerja tinggi pada RISC dan CISC adalah masalah derajat. Instruksi-decode dan logika yang dikirimkan dalam superscalar agresif RISC yang lebih sederhana daripada superscalar agresif CISC, namun logika diperlukan dalam kedua kasus tersebut. Hal yang sama berlaku untuk reorder buffer.


No comments:

Post a Comment