Secara teori register tidak diperlukan; semua mikroprosesor akan tetap berfungsi tanpa register. Namun penambahan yang tampaknya sepele ini telah membantu membuat mikroprosesor lebih efisien.
Mengapa kita tidak bisa memiliki lebih banyak register untuk mendapatkan manfaat lebih lanjut dari mereka? Mereka hanya memori pada chip dan bisa dibayangkan tidak terlalu sulit untuk ditambahkan? Faktor apa yang memengaruhi jumlah register menjadi seperti sekarang dan bukan, katakanlah 10x lebih banyak?
microprocessor
Darshan Chaudhary
sumber
sumber
Jawaban:
Ada beberapa faktor:
mikro-arsitektur berkinerja tinggi menggunakan pengubahan nama register. Artinya, jumlah register fisik lebih tinggi dari jumlah register yang terlihat secara arsitektur dan mereka dapat melacak penggunaannya secara independen.
menggandakan jumlah register tidak menggandakan kinerja. ISTR (dari arsitektur Komputer, Pendekatan Kuantitatif ) yang beralih dari 16 menjadi 32 register membawa peningkatan seperti 10% dengan asumsi bahwa peningkatan tersebut tidak memiliki efek yang merugikan (yang merupakan asumsi yang sangat optimis).
register yang terlihat secara arsitektur memiliki biaya. Contohnya:
sumber
Walaupun register dan RAM adalah memori, keduanya diakses dengan cara yang berbeda, untuk mencerminkan biaya (dalam area chip, atau siklus clock tersembunyi) untuk mengaksesnya.
Register terikat erat dengan ALU, dan dapat mengambil banyak peran sumber data, sink, modifier dll. Karena itu mereka membutuhkan banyak koneksi multiplex yang luas. Dalam beberapa arsitektur kita dapat menulis R1 <= R2 + R3, dan itulah yang terjadi dalam satu siklus clock tunggal. Setiap register ditangani secara langsung dalam kode op, pengalamatan ini adalah sumber daya yang sangat terbatas.
Karena register mahal untuk diimplementasikan, jumlahnya biasanya terbatas pada urutan 10/20 di sebagian besar arsitektur.
RAM terikat secara longgar ke CPU, biasanya disalurkan melalui satu koneksi bersama. Ini membuatnya jauh lebih murah untuk mengimplementasikan sejumlah besar RAM. Alamat RAM umumnya berasal dari alamat yang disimpan, jadi jangan mengkonsumsi lebar instruksi yang signifikan.
SPARC adalah arsitektur yang menarik, dengan register 72 hingga 640 64 bit, dengan konteks register 32 yang dapat digeser dengan tumpang tindih untuk panggilan subrutin cepat dengan melewati parameter. Anda cenderung tidak menemukannya di PC dan server tempat masalah biaya, seperti pada 99,999% aplikasi.
sumber
Register harus dikagumi dalam instruksi. Jika ada banyak register, instruksi lebih panjang. Menyimpan dan memulihkan konten register untuk layanan interupsi membutuhkan lebih banyak waktu jika ada banyak register.
sumber
Seperti kebanyakan hal, jumlah register adalah kompromi antara biaya, kompleksitas dan kegunaan.
Register diimplementasikan sebagai multi-port static RAM, yang membuatnya lebih mahal (area chip) daripada opsi penyimpanan lainnya.
Kemudian mereka digabungkan dengan set instruksi prosesor, meningkatkan jumlah register meningkatkan kompleksitas set instruksi. Jadi jika Anda ingin tetap kompatibel dengan set instruksi, Anda tidak bisa hanya meningkatkan jumlah register yang tersedia di prosesor generasi berikutnya untuk meningkatkan efisiensi, program tidak akan menggunakannya.
Berikutnya adalah berapa banyak register yang benar-benar Anda butuhkan? Ada batas kegunaannya. Pertimbangkan Anda menulis sebuah algoritma yang melakukan beberapa operasi matematika pada 1024 byte, katakanlah kalikan dengan 5. Dengan jumlah register saat ini, Anda berakhir dengan sesuatu seperti:
Sekarang jika Anda memiliki 1024 register dan semua data disimpan di sana, program Anda akan terlihat seperti:
Karena masing-masing dari mereka adalah instruksi yang berbeda, masing-masing dari mereka harus dituliskan. Jadi memori program yang Anda butuhkan meledak. Setelah menyadari ini, Anda mungkin ingin memperkenalkan beberapa instruksi seperti
multiply register1 with register(2 to 256)
,. Tetapi kapan Anda akan berhenti, apakah Anda memberikan instruksi untuk semua kombinasi?Jadi mungkin angka-angka yang kami miliki saat ini merupakan trade-off yang baik antara biaya, kompleksitas dan kegunaan.
sumber
multiply Register1 with Register2 multiply Register1 with Register3
ini sangat tidak realistis karena data pasti datang langsung atau tidak langsung dari luar komputer, sehingga register perlu dimuat, dan hasilnya perlu digunakan di suatu tempat, langsung atau tidak langsung, sehingga register perlu disimpan. Pada kenyataannya, kompiler pengoptimal yang layak untuk bahasa tingkat tinggi akan 'membuka gulungan' program pertama untuk membuat sesuatu seperti program kedua, mengoptimalkan penggunaan register, latensi memori, mungkin penyimpanan hunian cache dan kecepatan eksekusi.multiply register1 with register(2 to 256)
instruksi tujuan khusus . Pipelining meningkatkan throughput CPU secara signifikan terutama untuk lebih mudah memecahkan kode dan menjalankan instruksi. Jadi efek dari berbagai instruksi yang kompleks dan masif dapat dicapai dengan menggunakan beberapa instruksi sederhana dengan tingkat eksekusi yang lebih tinggi. Memiliki jumlah register yang lebih besar membantu dengan memungkinkan kompiler menghasilkan banyak instruksi independen (yang tidak membagikan register), yang dapat diselesaikan secara independen, meningkatkan throughput. Contoh Anda = lebih banyak register lebih baik.Registrasi sangat mahal. Sangat mahal. Tidak begitu banyak register sendiri, itu semua koneksi dari dan ke register. Katakanlah Anda memiliki instruksi reg1 = reg2 + reg3. Untuk mengimplementasikan ini dengan cepat , Anda perlu membaca data dari dua register dalam satu siklus, dan menulis ke register lain pada siklus kedua. Sekarang jika Anda memiliki prosesor yang dapat menjalankan beberapa instruksi per siklus, katakan tiga instruksi, Anda harus dapat membaca data dari enam register setiap siklus, dan menulis data ke 3 register. Itu koneksi yang sangat cepat, sangat buruk.
Tentu saja Anda bisa menggunakan lebih banyak transistor. Masalahnya adalah: Kecepatan turun. Anda memerlukan lebih banyak perangkat keras untuk dipilih dari lebih banyak register. Ruang untuk file register semakin besar. Semua itu membuat segalanya lebih lambat. Jadi dengan teknologi yang sama, Anda mungkin dapat memiliki 16 register dan berjalan pada 2.600 MHz atau memiliki 32 register dan berjalan pada 2.400 MHz. Sekarang register tambahan harus menebus penurunan kecepatan clock yang signifikan.
sumber
- Memory Hierarchy
Register, Cache, RAM semuanya diimplementasikan dengan teknologi penyimpanan yang berbeda.
Teknologi yang berbeda berbeda dalam
Contoh: Register internal yang ditemukan dalam CPU adalah Memori Akses Acak Statis , sedangkan memori utama komputer adalah Memori Akses Acak Dinamis
Sel biner RAM Statis diimplementasikan menggunakan sirkuit 6-transistor, sedangkan sel biner RAM Dinamis diimplementasikan menggunakan kapasitor dan transistor. Membandingkan SRAM dan DRAM
Jadi bukan hal yang praktis untuk menambah jumlah memori yang cepat, mahal, dan kurang kepadatan. Bahkan kita mungkin menggunakan beberapa dari mereka dan program yang ditulis dengan baik akan menyimpan data yang paling sering digunakan di dalam register cepat ini sementara data yang lebih jarang digunakan disimpan dalam memori yang lebih lambat.
- Panjang instruksi
Alamat register termasuk dalam instruksi, yang membatasi jumlah register yang dapat diakses berdasarkan jumlah bit yang dapat mewakili alamat. Misalnya dalam arsitektur MIPS 32-bit panjang instruksi memegang hanya 5-bit untuk mewakili alamat dari register dapat diakses yang membatasi jumlah register untuk 2 5 = 32 mendaftar. Meningkatkan jumlah register akan membutuhkan peningkatan panjang instruksi untuk memasukkan bit yang cukup yang dapat mengakses semua register.
sumber
Jika Anda melihat kumpulan instruksi prosesor, ada beberapa cara untuk mengelompokkannya. Misalnya, semua
ADD
instruksi dapat dikelompokkan bersama, dan semuaXOR
instruksi.Dalam setiap grup dari instruksi yang sama, mungkin ada versi yang beroperasi pada memori, atau pada register. Sub-pengelompokan inilah yang secara efektif menentukan jumlah register yang dimiliki prosesor.
Sebagai contoh hipotetis 8-bit, misalkan
$Ax
instruksinya mungkinADD
instruksinya, dan$Cx
mungkinXOR
instruksinya. Dengan desain ini, hanya ada empat bit yang tersisa untuk menentukan operan!$x0
bisa juga akumulator itu sendiri).Tentu saja, kita melewati set instruksi 8-bit. Tapi tetap saja, logika ini membantu mendefinisikan set register di masa lalu - itu akan terus melakukannya di masa depan.
EDIT (seperti yang diminta)
Mengatakan empat bit untuk instruksi:
ADD
,SUB
,XOR
,MOV
,CMP
dll Ada 16 kemungkinan di sini. Kemudian, untuk instruksi-instruksi itu di mana register-to-register masuk akal (misalnyaADD Rx,Ry
), Anda perlu menentukanRx
danRy
. Katakanlah dua bit berikutnya adalah untukx
, dan dua bit terakhir adalah untuky
. Jadi:Dengan hanya dua bit untuk mendefinisikan register seperti ini, Anda hanya memiliki ruang untuk total empat register!
Sebagai tambahan, Anda akan mencatat bahwa beberapa kombinasi register tidak masuk akal. Misalnya,
MOV Rx, Rx
(tidak melakukan apa-apa) danSUB Rx, Rx
(selalu menghasilkan0
). Ini bisa menjadi instruksi kasus khusus:SUB Rx, Rx
bisa menjadiNOT Rx
- instruksi operan tunggal.MOV Rx, Rx
bisa menjadiMOV
instruksi yang menggunakan byte kedua sebagai nilai langsung, diartikan sebagaiMOV Rx, #$yy
.Dengan cara ini Anda dapat "bermain" dengan peta instruksi, mengisi lubang untuk instruksi yang tidak berguna atau tidak masuk akal untuk memberikan set instruksi yang lebih besar untuk programmer. Tetapi pada akhirnya, set instruksi mendefinisikan set register.
sumber
Intel menggunakan ribuan register saat ini - ratusan per inti CPU. Tetapi jumlah terbesar data yang disimpan pada CPU adalah dalam cache, yang secara tidak langsung menjawab pertanyaan. Cache disusun berlapis-lapis, dengan cache L1 kecil cepat dan cache L2 dan L3 lebih jauh lebih jauh. File register dalam arti adalah L0, bahkan lebih cepat dari L1 tetapi juga lebih kecil. Jadi, Anda dapat menambah jumlah register, tetapi itu kemungkinan akan memperlambatnya.
sumber