"REDUCED INSTRUCTION SET COMPUTERS (RISCs)"
Perkembangan komputer sejak tahun 1950, telah ada sangat sedikit
inovasi sejati dalam bidang organisasi komputer dan arsitektur. Berikut
ini adalah beberapa kemajuan besar sejak kelahiran komputer :
·
The
Family Consept : Diperkenalkan oleh IBM dengan System/360 pada tahun 1964 ,
diikuti kemudian oleh DEC
, dengan PDP - 8 . Satu set komputer yang ditawarkan , dengan harga / kinerja karakteristik yang berbeda , yang
menyajikan arsitektur untuk pengguna . Perbedaan harga dan kinerja karena
implementasi yang berbeda dari arsitektur yang sama .
·
Microprogrammed
Unit Control : Disarankan oleh Wilkes pada tahun 1951 dan diperkenalkan
oleh IBM pada S/360 garis pada tahun 1964 .
Microprogramming digunakan untuk memudahkan tugas merancang dan menerapkan unit kontrol dan menyediakan dukungan untuk
keluarga konsep .
·
Cache
Memori : Pertama kali diperkenalkan secara komersial pada IBM S/360 model 85 di
1968. Penyisipan elemen ini ke dalam hirarki memori secara
dramatis meningkatkan kinerja .
·
Pipelining
: Sebuah cara memperkenalkan paralelisme ke dasarnya berurutan
sifat programnya mesin - instruksi . Contohnya adalah
instruksi pipelining dan pengolahan vektor
·
Beberapa
prosesor : Kategori ini meliputi sejumlah organisasi dan
tujuan yang berbeda .
Karakteristik - Karakteristik Eksekusi Instruksi
Salah satu evolusi komputer yang paling dirasakan adalah evolusi bahasa
pemrograman. Dengan semakin murahnya harga perangkat keras, harga perangkat
lunak relatif telah mengalami peningkatan. Pada waktu yang bersamaan, kurangnya
pemrogram telah mengakibatkan harga perangkat lunak semakin mahal. Akibatnya,
biaya terbesar dalam siklus kehidupan sistem dihabiskan untuk keperluan
perangkat lunak, bukannya perangkat keras. Sebagai tambahan terhadap biaya dan
ketidaknyamanan tersebut, terdapat elemen ketidakreliabilitasan : adalah suatu
hal yang umum bagi program, baik sistem maupun aplikasi, untuk terus mengandung
bug-bug baru setelah dioperasikan beberapa lama.
Sebagai jawaban dari para peneliti dan industri adalah dengan membuat bahasa
program tingkat tinggi (High Level Language – HLL) yang lebih baik dan lebih
kompleks. HLL ini memungkinkan pemrogram dapat mengekspresikan algoritma lebih
singkat, lebih memperhatikan rincian, dan sering kali mendukung secara alami penggunaan pemrograman terstruktur.
Solusi ini menimbulkan masalah lainnya, yang dikenal semantic gaps, yaitu
perbedaan antara operasi-operasi yang disediakan HLL dengan operasi yang
disediakan oleh arsitektur komputer. Tanda-tanda adanya gaps ini dinyatakan
dengan terjadinya ketidakefisienan eksekusi, program mesin yang berukuran
besar, dan kompleksitas kompiler. Sebagai contoh implementasi perangkat keras
tersebut adalah instruksi mesin CASE pada VAX. Set-set instruksi kompleks tersebut dimaksudkan untuk :
•
Memudahkan pekerjaan penulis kompiler
•
Meningkatkan efisiensi eksekusi, karena rangkaian
operasi yang kompleks dapat
diimplementasikandi dalam mikrokode
• Memberikan dukungan
bagi HLL yang lebih kompleks dan lebih canggih
Tabel
Karakteristik Beberapa CISCs, RISCs, dan Prosesor Superscalar
Dengan demikian, untuk memahami RISC, kita akan mengawalinya dengan tinjauan
karakteristik eksekusi instruksi, seperti :
• Operasi-operasi yang dilakukan :
hal ini menentukan fungsi-fungsi yang akan dilakukan oleh CPU dan interaksinya
dengan memori.
• Operand-operand yang digunakan : jenis-jenis
operand dan frekuensi pemakaiannya akan menentukan organisasi memori untik menyimpannya dan mode pengalamatan untuk
mengaksesnya.
• Pengurutan eksekusi :menentukan
kontrol dan organisasi pipeline
Operasi
Beberapa penelitian telah menganalisis tingkah
laku program HLL (High Level Language). Assignment Statement sangat menonjol
yang menyatakan bahwa perpindahan sederhana merupakan satu hal yang penting.
Hasil penelitian ini merupakan hal yang penting bagi perancang set instruksi
mesin yang mengindikasikan jenis instruksi mana yang sering terjadi karena
harus didukung optimal.
Operand
Penelitian Paterson telah memperhatikan
[PATT82a] frekuensi dinamik terjadinya kelas-kelas variabel. Hasil yang
konsisten diantara program pascal dan C menunjukkan mayoritas referensi
menunjuk ke variable scalar. Penelitian ini telah menguji tingkah laku dinamik
program HLL yang tidak tergantung pada arsitektur tertentu. Penelitian [LUND77] menguji instruksi DEC-10 dan
secara dinamik menemukan setiap instruksi rata-rata mereferensi 0,5 operand
dalam memori dan rata-rata mereferensi 1,4 register. Tentu saja angka ini
tergantung pada arsitektur dan kompiler namun sudah cukup menjelaskan frekuensi
pengaksesan operand sehingga menyatakan pentingnya sebuah arsitektur.
Procedure
Calls
Dalam HLL procedure
call dan return merupakan aspek penting karena merupakan operasi yang
membutuhkan banyak waktu dalam program yang dikompalasi sehingga banyak berguna
untuk memperhatikan cara implementasi opperasi ini secara efisien. Adapun
aspeknya yang penting adalah jumlah
parameter dan variabel yang berkaitan dengan prosedur dan kedalaman
pensarangan (nesting).
Implikasi
Secara umum penelitian menyatakan terdapat tiga
buah elemen yang menentukan karakter arsitektur RISC :
1. Penggunaan register dalam
jumlah besar yang ditunjukan untuk mengotimalkan pereferensian operand.
2. Diperlukan perhatian bagi
perancangan pipelaine instruksi karena tingginya proporsi instruksi pencabangan
bersyarat dan procedure call, pipeline instruksi yang bersifat langsung dan
ringkas menjadi tidak efisien
3. Terdapat set instruksi
yang disederhanakan
Penggunaan File
Register Besar
Alasan bahwa penyimpanan mendaftar ditunjukkan adalah bahwa itu
adalah perangkat penyimpanan yang tersedia tercepat, lebih cepat dari kedua
memori utama dan cache. Register file secara fisik kecil, pada chip yang sama
dengan ALU dan unit kontrol, dan mempekerjakan alamat jauh lebih pendek
daripada alamat untuk cache dan memori. Dengan demikian, strategi yang
diperlukan yang akan memungkinkan operan paling sering diakses akan disimpan
dalam register dan meminimalkan operasi mendaftar-memori.
Dua pendekatan dasar yang mungkin, yang didasarkan pada perangkat
lunak dan perangkat keras lainnya pada. Pendekatan perangkat lunak mengandalkan
kompiler untuk memaksimalkan penggunaan mendaftar. Compiler akan mencoba untuk
mengalokasikan register untuk variabel-variabel yang akan digunakan paling
dalam periode waktu tertentu. Pendekatan ini memerlukan penggunaan algoritma
program analisis canggih. Pendekatan hardware hanya untuk menggunakan lebih
register sehingga variabel yang lebih dapat diselenggarakan di register untuk
waktu yang cukup lama
Pada bagian ini, kita akan membahas pendekatan hardware. Pendekatan
ini telah dirintis oleh kelompok Berkeley RISC [PATT82a]; digunakan dalam
produk pertama RISC komersial, Piramida [RAGA83], dan saat ini digunakan dalam
SPARC populer arsitektur.
Register
Windows
penggunaan satu set besar
register harus mengurangi kebutuhan untuk mengakses tugas desain memory.The
adalah untuk mengatur register sedemikian rupa bahwa tujuan ini direalisasikan.
Karena kebanyakan referensi operan harus skalar lokal, pendekatan
yang jelas adalah untuk menyimpan ini dalam register, dengan mungkin beberapa
register disediakan untuk variabel global. Masalahnya adalah bahwa definisi
perubahan lokal dengan setiap prosedur panggilan dan kembali, perations yang
sering terjadi. Pada setiap panggilan, variabel lokal harus diselamatkan dari
register ke memori, sehingga register dapat digunakan kembali oleh program yang
disebut. Selanjutnya, parameter harus dilalui. Setelah kembali, variabel
program induk harus dikembalikan (dimuat kembali ke register) dan hasil harus
diteruskan kembali ke program induk.
Solusi ini berbasis pada dua hasil lainnya dilaporkan dalam Pasal
13.1. Pertama, prosedur yang khas hanya mempekerjakan beberapa parameter yang
dikirimkan dan variabel lokal (Tabel 13.4). Kedua, kedalaman aktivasi prosedur
berfluktuasi dalam kisaran yang relatif sempit (Gambar 4.21). Untuk
mengeksploitasi sifat ini, beberapa set kecil register yang digunakan,
masing-masing ditugaskan ke prosedur yang berbeda. Sebuah panggilan prosedur
otomatis beralih prosesor untuk menggunakan tetap-ukuran yang berbeda dari
register windos, daripada tabungan register di memori. windows untuk prosedur
yang berdekatan tumpang tindih untuk memungkinkan parameter passing
Konsep ini diilustrasikan pada Gambar 13.1. Pada setiap saat, hanya
satu windows register terlihat dan beralamat seolah-olah itu adalah
satu-satunya set register (misalnya, alamat 0 sampai N - 1). Windows akan
dibagi menjadi tiga area berukuran tetap. Register Parameter menyimpan
parameter diturunkan dari prosedur yang disebut prosedur saat ini dan terus
hasil yang akan dilalui kembali. Register lokal digunakan untuk variabel lokal,
seperti yang diberikan oleh register compiler.Temporary digunakan untuk
bertukar parameter dan hasil dengan tingkat yang lebih rendah berikutnya
(prosedur yang disebut oleh prosedur saat). Register sementara di satu tingkat
secara fisik sama dengan parameter register di depan
menurunkan tingkat. Ini tumpang tindih memungkinkan parameter yang
akan berlalu tanpa gerakan yang sebenarnya dari data. Perlu diingat bahwa,
kecuali untuk tumpang tindih, register pada dua tingkatan yang berbeda secara
fisik berbeda. Artinya, parameter dan lokal register di tingkat J adalah
memisah dari register lokal dan sementara di tingkat J-1
Untuk menangani setiap pola yang mungkin dari panggilan dan
kembali, jumlah register windows itu harus tak terbatas. Sebaliknya, register
windows dapat digunakan untuk menyimpan beberapa aktivasi prosedur terbaru.
Aktivasi tua harus disimpan dalam memori dan kemudian dikembalikan ketika
kedalaman bersarang menurun. Dengan demikian, organisasi sebenarnya dari file
register sebagai penyangga melingkar windows yang tumpang tindih. Dua contoh
penting dari pendekatan ini adalah Sun SPARC arsitektur, dijelaskan dalam
Bagian 13.7, dan arsitektur IA-64 yang digunakan dalam prosesor Intel Itanium,
yang telah diuraikan dalam Bab 21.
Organisasi melingkar ditunjukkan pada Gambar 13.2, yang
menggambarkan lingkaran buffer dari enam windows. Buffer penuh hingga kedalaman
4 (A disebut B, B disebut C, C disebut D) dengan prosedur D aktif
current-windows pointer (CWP) poin ke windows dari prosedur yang sedang aktif.
Daftar referensi oleh instruksi mesin diimbangi dengan pointer ini untuk
menentukan register fisik yang sebenarnya. Windows disimpan pointer (SWP)
mengidentifikasi windows paling baru disimpan dalam memori. Jika prosedur D
sekarang memanggil prosedur E, argumen untuk E ditempatkan dalam register
sementara D's (tumpang tindih antara w3 dan w4) dan CWP yang dikemukakan oleh
satu windows.
Jika prosedur E kemudian
membuat panggilan ke prosedur F, panggilan tidak dapat dibuat dengan status
buffer.This adalah karena F jendela tumpang tindih A jendela. Jika F mulai
memuat register sementaranya, persiapan panggilan, ia akan menimpa parameter
register A (A.in). Jadi, ketika CWP bertambah (modulo 6) sehingga menjadi sama
dengan SWP, interupsi terjadi, dan A window disimpan. Hanya pertama dua porsi
(A.in dan A.loc) perlu menjadi saved.Then, SWP bertambah dan panggilan untuk F
hasil. Sebuah interupsi yang sama dapat terjadi pada hasil. Misalnya, setelah
aktivasi F, ketika B kembali ke A, CWP decremented dan menjadi sama dengan
SWP.This menyebabkan interupsi yang mengakibatkan pemulihan A window
Dari sebelumnya, dapat dilihat bahwa N-jendela
mendaftar file yang dapat menyimpan hanya N-1 prosedur aktivasi. Nilai N tidak
perlu besar. Seperti disebutkan dalam Lampiran 4A, satu studi [TAMI83]
menemukan bahwa, dengan 8 jendela, menyimpan atau mengembalikan diperlukan pada
hanya 1% dari panggilan atau kembali. The Berkeley RISC komputer menggunakan 8
jendela dari 16 register masing-masing. Komputer Piramida mempekerjakan 16
jendela dari 32 register masing-masing.
Variabel
Global
Skema window baru saja dijelaskan memberikan
organisasi yang efisien untuk menyimpan variabel skalar lokal dalam register.
Namun, skema ini tidak membahas kebutuhan untuk menyimpan variabel global, yang
diakses oleh lebih dari satu prosedur. Dua pilihan sarankan sendiri. Pertama,
variabel yang dideklarasikan sebagai global dalam sebuah HLL dapat diberikan lokasi
memori oleh kompilator, dan semua instruksi mesin yang referensi
variabel-variabel akan menggunakan operan memori referensi. Ini sangat mudah,
baik dari perangkat keras dan perangkat lunak (compiler) sudut pandang. Namun,
untuk variabel global sering diakses, skema ini tidak efisien.
Sebuah alternatif adalah untuk menggabungkan
satu set register global dalam prosesor. Ini register akan tetap dalam jumlah
dan tersedia untuk semua prosedur. Skema penomoran terpadu dapat digunakan
untuk menyederhanakan format instruksi. Sebagai contoh, referensi untuk
register 0 sampai 7 bisa merujuk pada register global yang unik, dan referensi
ke register 8 sampai 31 bisa diimbangi untuk merujuk register fisik di jendela
saat ini. Ada beban hardware meningkat untuk mengakomodasi perpecahan dalam
menangani mendaftar. Selain itu, compiler harus menentukan variabel global
harus diserahkan kepada register.
Large Register File versus Cache
Register File, disusun dalam windows, bertindak
sebagai kecil, penyangga cepat untuk memegang subset dari semua variabel yang
mungkin untuk digunakan yang paling berat. Dari sudut pandang ini, register
file bertindak seperti memori cache, meskipun memori jauh lebih cepat.
Pertanyaan itu muncul, apakah itu akan lebih sederhana dan lebih baik untuk
menggunakan cache dan register file kecil tradisional
Tabel 13.5 membandingkan karakteristik dari dua
pendekatan. Windows-based register file memegang semua variabel skalar lokal
(kecuali dalam kasus yang jarang jendela overflow) dari aktivasi N-1 prosedur
terbaru. Cache memegang pemilihan variabel skalar baru digunakan. Register file
harus menghemat waktu, karena semua variabel skalar lokal dipertahankan. Di
sisi lain, cache dapat membuat lebih efisien penggunaan ruang, karena bereaksi
terhadap situasi dinamis. Selanjutnya, cache
umumnya memperlakukan semua referensi memori
sama, termasuk instruksi dan jenis data lainnya. Dengan demikian, penghematan
di daerah-daerah lain yang mungkin dengan cache dan bukan register file.
Sebuah register file dapat menggunakan tidak
efisien ruang, karena tidak semua prosedur akan membutuhkan ruang penuh jendela
yang dialokasikan kepada mereka. Di sisi lain, cache menderita jenis lain
inefisiensi: Data yang dibaca ke dalam cache di blok. Sedangkan register file
hanya berisi variabel yang digunakan, cache membaca dalam sebuah blok data,
beberapa atau banyak yang tidak akan digunakan.
Cache mampu menangani global serta variabel
lokal. Biasanya ada banyak skalar global, tetapi hanya sedikit dari mereka yang
banyak digunakan [KATE83]. Cache secara dinamis akan menemukan variabel
tersebut dan menahan mereka. Jika register file berbasis window dilengkapi
dengan register global, juga bisa memegang beberapa skalar global. Namun, sulit
bagi compiler untuk menentukan GLOBALS akan banyak digunakan.
Dengan register file, pergerakan data antara
register dan memori ditentukan oleh kedalaman prosedur bersarang. Karena
kedalaman ini biasanya berfluktuasi dalam kisaran yang sempit, penggunaan
memori relatif jarang terjadi. Kebanyakan cache memori diatur asosiatif dengan
size.Thus set kecil, ada bahaya bahwa data atau instruksi lain akan menimpa
variabel yang sering digunakan.
Berdasarkan diskusi sejauh ini, pilihan antara
berbasis jendela register file besar dan cache yang tidak jelas. Ada satu
karakteristik, namun, di mana pendekatan mendaftar jelas unggul dan yang
menunjukkan bahwa sistem berbasis cache akan terasa lebih lambat. Perbedaan ini
muncul dalam jumlah mengatasi overhead yang dialami oleh dua pendekatan.
Gambar 13.3 mengilustrasikan perbedaan. Untuk
referensi skalar lokal dalam register file windowbased, "virtual"
nomor register dan sejumlah jendela yang digunakan. Ini dapat melewati decoder
relatif sederhana untuk memilih salah satu register fisik. Untuk referensi lokasi
memori dalam cache, alamat memori penuh-lebar harus dibangkitkan. Kompleksitas
operasi ini tergantung pada mode pengalamatan. Dalam cache asosiatif set,
sebagian dari alamat digunakan untuk membaca sejumlah kata dan tag sama dengan
ukuran set. Bagian lain dari alamat dibandingkan dengan tag, dan salah satu
kata-kata yang dibaca dipilih. Harus jelas bahwa bahkan jika cache secepat
register file, waktu akses akan jauh lebih lama. Dengan demikian, dari sudut
pandang kinerja, register file berbasis window lebih unggul untuk skalar lokal.
Selanjutnya peningkatan kinerja dapat dicapai dengan penambahan cache untuk
petunjuk saja.