Mengapa ada yang mau CISC?

42

Dalam kuliah sistem komputer kami, kami diperkenalkan dengan prosesor MIPS. Itu (kembali) dikembangkan selama jangka waktu dan sebenarnya cukup mudah dimengerti. Ini menggunakan desain RISC , yaitu perintah-perintah dasar yang secara teratur dikodekan dan hanya ada beberapa dari mereka untuk menjaga kabel tetap sederhana.

Disebutkan bahwa CISC mengikuti filosofi yang berbeda. Saya melihat sekilas instruksi set x86 dan terkejut. Saya tidak dapat membayangkan bagaimana orang ingin membangun prosesor yang menggunakan sekumpulan perintah yang sangat rumit!

Jadi saya pikir harus ada argumen yang bagus mengapa sebagian besar pasar prosesor menggunakan arsitektur CISC. Apakah mereka?

Raphael
sumber
1
Lihat juga jawaban ini oleh Thomas Pornin .
Gilles 'SO- stop being evil'

Jawaban:

47

Ada tren sejarah umum.

Di masa lalu, ingatannya kecil, dan karena itu program terpaksa kecil. Juga, kompiler tidak terlalu pintar, dan banyak program ditulis dalam assembler, jadi itu dianggap hal yang baik untuk dapat menulis suatu program menggunakan beberapa instruksi. Pipa instruksi sederhana, dan prosesor mengambil satu instruksi pada satu waktu untuk melaksanakannya. Mesin di dalam prosesor itu cukup rumit; instruksi decoding tidak terasa menjadi beban.

Pada 1970-an, perancang CPU dan kompiler menyadari bahwa memiliki instruksi yang begitu rumit sama sekali tidak membantu. Sulit untuk mendesain prosesor di mana instruksi itu benar-benar efisien, dan sulit untuk merancang kompiler yang benar-benar memanfaatkan instruksi ini. Area chip dan kompleksitas kompiler lebih baik dihabiskan untuk pencarian yang lebih umum seperti register tujuan umum. The artikel Wikipedia pada RISC menjelaskan ini secara lebih rinci.

MIPS adalah arsitektur RISC utama, itulah mengapa ia diajarkan begitu sering.

Keluarga x86 sedikit berbeda. Awalnya arsitektur CISC dimaksudkan untuk sistem dengan memori sangat kecil (tidak ada ruang untuk instruksi besar), dan telah mengalami banyak versi berturut-turut. Set instruksi x86 hari ini tidak hanya rumit karena CISC, tetapi karena itu benar-benar 8088 dengan 80386 dengan Pentium mungkin dengan prosesor x86_64.

Di dunia saat ini, RISC dan CISC tidak lagi menjadi perbedaan hitam putih seperti dulu. Sebagian besar arsitektur CPU telah berevolusi menjadi berbagai warna abu-abu.

Di sisi RISC, beberapa varian MIPS modern telah menambahkan instruksi perkalian dan pembagian, dengan penyandian yang tidak seragam. Prosesor ARM menjadi lebih kompleks: banyak dari mereka memiliki set instruksi 16-bit yang disebut Thumb sebagai tambahan pada instruksi 32-bit "asli", belum lagi Jazelle untuk menjalankan instruksi JVM pada CPU. Prosesor ARM modern juga memiliki instruksi SIMD untuk aplikasi multimedia: bagaimanapun, beberapa instruksi kompleks membayar.

Di sisi CISC, semua prosesor terbaru sampai batas tertentu RISC di dalamnya. Mereka memiliki mikrokode untuk mendefinisikan semua instruksi makro yang kompleks ini. Kompleksitas tipis dari prosesor membuat desain masing-masing model memakan waktu beberapa tahun, bahkan dengan desain RISC, apa dengan sejumlah besar komponen, dengan pipelining dan eksekusi prediktif dan yang lainnya.

Jadi mengapa prosesor tercepat tetap berada di luar CISC? Sebagian darinya, dalam kasus keluarga x86 (32-bit dan 64-bit), adalah kompatibilitas historis. Tapi itu belum semuanya. Pada awal 2000-an, Intel mencoba mendorong arsitektur Itanium . Itanium adalah kasus ekstrem dari instruksi yang kompleks (meskipun tidak benar-benar CISC: desainnya telah dijuluki EPIC ). Itu bahkan menghilangkan gagasan kuno dalam melaksanakan instruksi secara berurutan: semua instruksi dieksekusi secara paralel hingga penghalang berikutnya. Salah satu alasan Itanium tidak mengambil adalah bahwa tidak ada orang, apakah di Intel atau di tempat lain, dapat menulis kompiler yang layak untuk itu. Sekarang prosesor tua yang sebagian besar berurutan seperti x86_64, itu adalah sesuatu yang kami pahami.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4
Salah satu alasannya adalah bahwa CISC keluar dari memori terbatas (membuat instruksi ringkas menjadi keharusan), CPU saat ini jauh lebih cepat daripada memori ( satu memori membutuhkan waktu yang cukup untuk menjalankan ratusan instruksi, dan jaraknya semakin lebar), jadi instruksi ringkas berada di premium untuk menggunakan cache secara efektif.
vonbrand
Oh, dan salah satu kekuatan pendorong di belakang RISC adalah analisis instruksi yang dieksekusi pada mesin CISC hari itu. Mereka ternyata instruksi yang sangat sederhana, sehingga upaya ekstra (sirkuit dan waktu) dari decoding instruksi kompleks sebagian besar terbuang sia-sia.
vonbrand
2
@vonbrand: Pada prosesor yang menyertakan instruksi seperti dec [address], mereka cenderung digunakan sedikit dan menawarkan keuntungan signifikan ldr r0,[address] / sub r0,#1 / str r0,[address] pada arsitektur yang dapat mengimplementasikannya secara efisien . Munculnya RISC berasal dari fakta bahwa sementara mesin non-pipelined dapat mengimplementasikan declebih dari dua kali lebih cepat sebagai load/sub/storeurutan, pipelining dapat meningkatkan kecepatan urutan terakhir lebih dari itu dapat meningkatkan kecepatan baca-modifikasi-tulis petunjuk.
supercat
@vonbrand benar, karena RAM tidak semahal dulu, tetapi cache. Huffman mengkode set instruksi (yang merupakan jenis CISC hari ini) masih berharga dalam arti itu.
Nama samaran
Ya, itu adalah sesuatu yang tidak pernah saya ketahui tentang Itanium! Terima kasih. (juga, berharap seseorang masih membuat CPU MIPS kelas atas - mereka sepertinya menarik untuk diprogram. Saya tahu desain ada tetapi tidak ada yang membuatnya dari FPGA -_-)
Wyatt8740
15

Set instruksi x86 adalah sedikit kasus khusus. Saya pikir Motorola 68K dan DEC's VAX adalah contoh yang lebih baik dari CISC. Pada masa banyak kode bahasa assembly, orang berpikir bahwa ISA yang sangat teratur dan inklusif lebih baik: Saya percaya mereka menyebut perbedaan antara kode assembly dan cara orang berpikir " Celah Semantik ". Secara teoritis, Anda menginginkan set instruksi yang sesuai dengan cara Anda berpikir.

Driver desain besar lainnya untuk CISC tampaknya "orthogonality": setiap instruksi akan bekerja dengan setiap mode pengalamatan (register, alamat absolut, offset relatif, dll.). Anda dapat melihat bogey man dari orthogonality muncul dalam desain API di Lingkungan Komputer Terdistribusi (DCE) dan di CORBA. Gagasan itu tidak terbatas pada desain set instruksi.

Bruce Ediger
sumber
5
Lucu bagaimana ortogonalitas dalam praktik ternyata berarti penyatuan semua opsi .
Dave Clarke
Ortogonality itu tentu saja bisa diambil terlalu jauh, tetapi itu adalah penolong yang berguna untuk ingatan. Saya menyukai Motorola 6502, tetapi memiliki segala macam kemarahan "instruksi ini mengambil X, yang mirip hanya Y, yang ketiga tidak sama sekali" pembatasan penggunaan register. Bertemu dengan VAX membebaskan ...
vonbrand
@vonbrand: The 6502 bukan Motorola - itu adalah MOS Technologies, yang memproduksinya sebagai pesaing untuk Motorola 6800. Saya kadang-kadang bertanya-tanya apakah 6502 akan lebih sederhana atau lebih rumit jika semua instruksi non-cabang yang operan yang diambil menggunakan pengodean yang sama (24 instruksi kali delapan mode pengalamatan dapat diuraikan dengan mudah). Saya merasa sangat penasaran bahwa CMP bekerja dengan delapan mode pengalamatan, dan DEC dengan hanya empat, tetapi (pada versi NMOS dari 6502) jika satu "ATAU" bersama opcodes untuk instruksi tersebut, tidak hanya satu akan mendapatkan "DCP" instruksi ...
supercat
... yang berperilaku seperti DEC, tetapi kemudian membandingkan hasil pengurangan dengan nilai dalam akumulator dan menetapkan flag dengan tepat, tetapi DCP akan menangani mode pengalamatan yang tidak tersedia dengan DEC dengan benar. Aneh bahwa perangkat keras dapat menangani (ZP) dengan benar, menangani Y dengan instruksi tulis baca-modifikasi, tetapi dekoder instruksi tidak akan membiarkan mode itu bekerja dalam instruksi baca-modifikasi-tulis yang didokumentasikan.
supercat
1
Dari apa yang saya baca, "R" di RISC tidak berarti prosesor memiliki serangkaian instruksi yang berkurang, melainkan bahwa ia memiliki serangkaian instruksi yang berkurang; aspek terbesar dari itu adalah persyaratan bahwa memori memuat dan menyimpan tidak digabungkan dengan operasi lain.
supercat
7

Salah satu alasan CISC adalah untuk melakukan encoding yang padat untuk instruksi (memori mahal). Gagasan RISC keseluruhan adalah untuk mempercepat CPU dengan mengambil instruksi ukuran yang sama setiap saat (tidak ada langkah, rumit "mencari tahu ukuran instruksi" langkah), minta mereka melakukan hal-hal sederhana (sehingga cepat untuk mencari tahu apa yang harus dilakukan) . Memori itu murah. Area sirkuit ini dibebaskan pada CPU untuk hal-hal lain (register lebih banyak, unit pemrosesan lebih banyak sehingga beberapa instruksi dapat dilakukan secara paralel jika mereka independen). Karena CPU jauh lebih lambat daripada RAM, ini terbayar. Tetapi CPU menjadi lebih cepat (dan melakukan lebih banyak secara paralel, dan ...) sementara RAM tidak mendapatkan lebih cepat (setidaknya tidak pada tingkat yang sama dari konsumsi data CPU karena peningkatan paralelisme). Temui memori cache, secepat CPU tetapi kecil. Jadi sekarang memori berada pada premium lagi, bukan karena alasan biaya tetapi untuk kecepatan. Waktu kebangkitan CISC. Sementara itu, CPU menjadi lebih kompleks, ke titik bahwa mikroprosesor saat ini melakukan banyak hal yang dilakukan oleh kompiler RISC: Memecah operasi menjadi bagian-bagian dasar, menyusun ulang instruksi RISCy internal sehingga mereka dapat dilakukan secara bersamaan jika memungkinkan. RISC dijuluki "Meringankan Hal-Hal Penting untuk Dikompilasi" karena suatu alasan ...

vonbrand
sumber
1
Kapasitas memori masih penting dalam beberapa sistem tertanam, khususnya mikrokontroler di mana semua memori / penyimpanan berada pada chip prosesor. Ini mungkin merupakan faktor penting untuk pengenalan Renesas tentang CISC ISA - RX-- baru, yaitu, bukan hanya kepadatan kode untuk kinerja tetapi (terutama?) Untuk penyimpanan yang berkurang.
Paul A. Clayton
Dari apa yang saya mengerti, "R" dari RISC tidak merujuk pada set instruksi yang dikurangi, tetapi lebih kepada instruksi itu sendiri yang dikurangi. Terutama, dalam prosesor CISC seperti 8086, seseorang dapat menambahkan nilai langsung ke memori, tetapi dalam RISC, memuat, menambah, dan menyimpan harus dilakukan sebagai langkah terpisah. Dalam banyak kasus, mesin CISC memiliki set instruksi panjang variabel dan kode instruksi lebih padat dari mesin RISC, tetapi prosesor ARM yang lebih baru menggunakan instruksi panjang variabel dan masih memisahkan muatan dan toko.
supercat
@ PaulA.Clayton Ini benar, tetapi saya akan menjadi luar biasa dan menunjukkan bahwa Anda dapat antarmuka RAM eksternal (baik SRAM atau DDR melalui controller) dan memperluas kapasitas memori Anda dengan mengorbankan kompleksitas tambahan dan mengurangi kepraktisan.
Wyatt8740
3

Keuntungan nyata dari CISC adalah berkurangnya memori dan tekanan cache dan itu saja membuatnya lebih baik untuk menuntut aplikasi berkinerja tinggi karena hambatan utama dalam sistem tersebut adalah bandwidth memori. Dengan memori cache yang berukuran sama, prosesor CISC dapat mendeskripsikan lebih banyak informasi daripada RISC. Juga, karena instruksi CISC melibatkan beberapa operasi mikro, peningkatan arsitektur mungkin dilakukan yang dapat memberikan jalur eksekusi tercepat untuk instruksi yang dapat dituliskan dengan instruksi individual. Singkatnya, prosesor CISC lebih efisien dalam memanfaatkan bandwidth memori yang sering diterjemahkan menjadi peningkatan kinerja untuk aplikasi intensif memori.

Misalnya, untuk melakukan R1 = R2 + R3 + R4 + R5 + R6dan mendorong hasilnya ke tumpukan, katakan kode RISC ditulis sebagai,

ADD  R1, R2, R3 (4-byte)
ADD  R1, R4, R5 (4-byte)
ADD  R1, R6, R0 (4-byte, R0=0)
PUSH R1         (4-byte)

dan karenanya membutuhkan 16-byte ruang.

Datang ke CISC, karena kemungkinan gaya pengkodean yang berbeda, informasi yang sama dapat direpresentasikan sebagai berikut ...

ADD R1, R2, R3 (4-byte)
ADD R1, R4, R5 (4-byte)
ADD R1, R6     (2-byte)
PUSH R1        (1-byte) 

yang hanya membutuhkan 12 byte memori. Dengan demikian, pemanfaatan memori ditingkatkan memungkinkan prosesor untuk melihat lebih banyak instruksi dan dengan demikian mengurangi siklus idle.

Revanth Kamaraj
sumber
1
Ini memberikan perspektif yang bermanfaat tetapi juga tampaknya sedikit berlebihan dalam penggunaan kata sifat. "keuntungan kinerja besar" - apakah Anda mau menghitungnya? Bisakah Anda membenarkan bagian "besar"? Demikian pula untuk "informasi lebih lanjut".
DW
Saya percaya Linus Torvalds mengatakan pernyataan serupa. Kata sifat dihapus pula.
Revanth Kamaraj
Ini tidak benar. CISC tidak mengurangi bandwidth memori. Tekanan daftar mungkin.
Jeff
Jeff, lihat arsitektur soc milik Steve Furber.
Revanth Kamaraj
Page 27 ARM System On Chip arsitektur 2nd edition.
Revanth Kamaraj
2

Aspek penting yang belum dibicarakan adalah bahwa hampir semua CPU CISC adalah arsitektur mikrokode. Sebuah microsequencer dan toko kontrol mengkonsumsi real estat yang jauh lebih sedikit daripada pengontrol bawaan, dan set instruksi dapat dimodifikasi tanpa memodifikasi perangkat keras.

Mikroprosesor adalah perangkat baru ketika saya memasuki lapangan. Praktik yang sangat umum di tahun tujuh puluhan dan awal delapan puluhan adalah untuk merakit CPU menggunakan bit-slice ALUs, unit kontrol berbasis-mikro, dan toko kontrol di mana set instruksi mikrokode dimuat atau ditiup. Komputer-komputer ini didasarkan pada 7400 series transistor-transistor logic (TTL). 78181 4-bit ALU digunakan untuk membangun banyak prosesor, termasuk komputer DEC PDP-11 dan komputer VAX 11 awal, Data General Nova, Xerox Alto, dan komputer desktop Wang.

bit-twiddler
sumber
"Aspek penting yang belum dibicarakan adalah bahwa hampir semua CPU CISC adalah arsitektur mikrokode." Iya dan tidak. Untuk penjadwalan instruksi, CPU CISC modern biasanya hanya menggunakan kontrol mikrokodekan untuk instruksi CISC lawas (mis. Instruksi transendental x87). Di sisi lain, bahkan chip RISC sesekali menggunakan kontrol mikrokode sebagai alternatif untuk mesin negara untuk beberapa subsistem (misalnya untuk mengendalikan beberapa unit tertentu). Memang, garis antara mikrokode dan tabel keadaan bisa kabur.
Nama samaran
2

Anda akan kesulitan menemukan komputer desktop yang tidak menggunakan prosesor yang kompatibel x86. Set instruksi telah mengalahkan MIPS, telah mengalahkan Sparc, telah mengalahkan Alpha, telah mengalahkan Titanic (saya mungkin salah mengeja nama itu). MIPS di sisi lain hampir tidak ada saat ini. Jadi, apa pun yang Anda pikirkan hari ini, orang yang sangat pintar berpikir bahwa set instruksi x86 adalah ide yang sangat bagus, dan mereka telah menghasilkan banyak uang dengannya.

Komputer dimulai sebagai RISC karena set instruksi yang kompleks hanya di luar kemampuan implementor. Jika Anda ingin melihat set instruksi RISC, lihat set instruksi CDC 6400-6600 dan CDC Cyber ​​170-175. Itu RISC yang tepat. Sekitar 10 tahun yang lalu saya bertanya kepada beberapa desainer chip berapa banyak ruang yang akan membutuhkan (di sudut chip GPU canggih yang masuk akal). Mereka memberi tahu saya tentang 1mm2 - termasuk RAM mesin, yang akan mengambil 99% dari ruang itu.

Ketika orang bisa membangun mesin CISC, mereka sebenarnya diuntungkan. Ingat bahwa x86 telah dirilis jauh sebelum MIPS, 1978 vs 1985. Pada saat itu Anda membutuhkan siklus prosesor untuk membaca instruksi, mendekode mereka, menjalankannya. MIPS pada tahun 1978 akan mengambil empat siklus per instruksi, dan per operasi. Jika Anda mengambil instruksi x86 seperti "add register to memory", itu mungkin membutuhkan 7 siklus untuk instruksi tersebut, tetapi melakukan 3 operasi. Itu adalah keuntungan besar. Dan semakin banyak instruksi yang Anda miliki, dan semakin kuat setiap instruksi, semakin besar keuntungannya.

Dan ketika set instruksi x86 64 bit dengan kode awalan mimpi buruknya dikembangkan, kompleksitas set instruksi tidak penting lagi. CISC saat ini baru saja diterjemahkan ke dalam RISC, dan seluruh bisnis terjemahan mungkin satu persen dari chip.

gnasher729
sumber
1

Pertanyaan ini banyak berkaitan dengan tren terbaru dalam komputasi yang mendukung pergeseran besar ke komputasi seluler dan tablet, sehingga mendukung RISC cpus, dan telah menangkap Intel (mungkin pemasok CISC terbesar di dunia) pada kerugian dalam apa yang disebut "infleksi" titik " persis seperti Grove menarik perhatian dan memperingatkan. Ceritanya adalah bahwa CISC tampaknya mulai mencair di bawah serangan gencar paradigma-perubahan / gamechanging komputasi mobile karena konsumsi energinya yang tampaknya intrinsik tinggi.

CISC mungkin akan selalu ada di desktop tetapi mobile secara luas dianggap sebagai masa depan komputasi yang baru. Banyak negara berkembang (dengan populasi besar yang berpotensi menggunakan komputer) sebenarnya akan melompati fase desktop. Lihat, misalnya, Naik dan Turunnya komputasi desktop

Sebuah studi kasus yang sangat baik dari pertanyaan ini adalah membaca tentang Mike Bell yang bekerja untuk Intel di posisi baru yang mencoba memposisikan Intel lebih baik di pasar ponsel melalui Atom CPU melalui proyek / inisiatif mirip skunkworks, dengan eksekutif yang sangat kuat mendukung. Pasar seluler sangat erat digabungkan dengan arsitektur RISC, dan terutama prosesor ARM, sebagian besar karena efisiensi energi yang tinggi (konsumsi daya), kriteria kunci baru untuk komputasi yang disebutkan oleh pertanyaan & tidak ada jawaban lain. Berikut adalah dua artikel terbaru di sepanjang baris ini yang mengungkapkan banyak pemikiran internal perusahaan (dan perebutan berikutnya!) Pada subjek:

vzn
sumber
tambahan. dimaksudkan untuk mengutip artikel tentang titik belok berbasis bisnis , yang secara longgar terkait dengan konsep matematika. lihat misalnya Andy Grove dan misteri titik belok
vzn
0

Faktor yang tidak disebutkan dalam jawaban lain adalah ekonomi. Ini juga tentang Intel. Arsitektur CISC sebagian besar diwakili oleh keluarga x86 dan x64. Ini semua turun dari 8088 sederhana yang digunakan dalam PC IBM asli. Dominasi pasar awal dari seri komputer itu berarti bahwa Intel memiliki aliran pendapatan yang kuat untuk R&D. Ditambah dengan fakta bahwa Intel mampu mengekang kompetisi dengan mengingkari / membatalkan perjanjian sumber keduanya berarti harga CPU dapat naik ke tingkat ekstrem memastikan margin laba kotor yang sangat kaya.

Jadi sementara produsen CPU lain berjuang untuk mengimbangi, Intel mampu mengeluarkan miliaran dolar untuk mengembangkan produk-produk baru yang lebih cepat. Kompetisi RISC tidak bisa menghabiskan uang sebanyak itu. Banyak prosesor RISC keluar dari pasar. Beberapa di antaranya:

DEC Alpha, Fairchild Clipper, AMD 29000, SPARC, MIPS, POWER (untuk penggunaan PC), Hitachi SuperH ...

Saya ingat para pakar dari era itu mengumumkan bahwa perang RISC vs CISC telah berakhir dan CISC telah menang. Itu belum. Itu hanya menghabiskan semua orang.

Bisakah dinamika ini berubah? Sudah. Tidak ada keuntungan ekonomi yang absolut.

Satu-satunya kelemahan Achilles pada x86 adalah hasratnya yang rakus akan kekuasaan. Hal ini memungkinkan pesaing yang lebih kecil, lebih gesit (ARM) untuk berkembang di pasar (seperti ponsel / tablet / dll) di mana penghematan energi penting.

Video hebat tentang ini dari anggota tim ARM adalah ARM Processor - Menabur Benih Sukses - Computerphile sekitar pukul 8:30

Masalah kedua untuk x86 adalah keberhasilan strategi Intel. Mereka berhasil menghilangkan hampir semua kompetisi. Mereka melambat. Selama bertahun-tahun sekarang, prosesor Intel baru hanya memberikan peningkatan yang sangat sederhana. Lebih buruk lagi, margin super kaya adalah diet yang sulit untuk menyerah bagi perusahaan mana pun.

Saat ini, Systems on Chip (SOC) berbasis ARM dan chip x64 yang bersaing dari AMD sekali lagi menjadikan pasar CPU tempat yang menarik. (MENURUT OPINI SAYA)

Peter Camilleri
sumber
0

Ada banyak alasan seseorang akan memilih untuk mengimplementasikan CISC. Alasan yang paling menonjol adalah untuk kompatibilitas biner dengan set instruksi CISC yang ada. Sementara teknologi terjemahan biner perangkat lunak telah meningkat, kompatibilitas berbasis perangkat keras memiliki beberapa keunggulan teknis (dan juga kelemahan dari caching terjemahan yang lebih sedikit) dan keuntungan teknis yang kurang tampak lebih dapat diandalkan.

Kepadatan kode mungkin merupakan alasan terpenting kedua untuk memilih CISC. Renesas RX dirancang sebagai CISC khusus untuk kepadatan kode karena menargetkan mikrokontroler di mana ukuran memori kode merupakan faktor biaya yang signifikan. Instruksi panjang variabel, instruksi kompleks (terutama mode pengalamatan lebih banyak), operan implisit, dan register yang lebih rendah menghitung semua kepadatan kode manfaat.

Alasan historis (dan menurut saya salah arah) untuk memilih CISC adalah untuk menutup celah semantik antara programmer menggunakan bahasa tingkat yang lebih tinggi dan prosesor. Karena instruksi yang kompleks umumnya dapat diganti dengan urutan instruksi yang lebih sederhana, kompleksitas dari kompiler bahasa tingkat yang lebih tinggi untuk RISC tidak perlu jauh lebih kompleks daripada CISC yang cocok dengan bahasa. RISC menghindari "bentrokan semantik" (di mana instruksi prosesor bekerja lebih atau kurang berfungsi daripada pernyataan bahasa yang sesuai) dan memfasilitasi pengurangan kekuatan dan optimalisasi penjadwalan. (Lihat "Apa tradeoffs dalam upaya pengembangan compiler terkait dengan CISC vs RISC?" Untuk lebih jelasnya.)

Mungkin ada biaya tetap yang signifikan terkait dengan pelaksanaan instruksi. Ini mendorong penggunaan instruksi yang relatif kompleks untuk menyebarkan overhead ini pada pekerjaan yang lebih aktual; mengurangi jumlah instruksi dinamis dapat meningkatkan kinerja. Ketika biaya logika dan RAM jauh lebih besar daripada biaya ROM, insentif untuk instruksi kompleks menjadi signifikan karena instruksi diterjemahkan dengan melihat mikrokode.

Alasan untuk menggunakan CISC yang mungkin bertentangan dengan bukti historis adalah bahwa mikrokode dapat dioptimalkan untuk setiap mikroarsitektur sedangkan perpustakaan standar mungkin lambat untuk mengeksploitasi fitur dari implementasi baru. Tingkat optimisasi implementasi perangkat lunak dari memcopy dibandingkan dengan dari mikrokode untuk REP MOVSB ​​menyiratkan bahwa perpustakaan bisa mendapatkan lebih banyak perhatian daripada mikrokode. Sebagian dari ini mungkin berasal dari vendor prosesor yang menargetkan basis pengguna yang lebih luas sehingga pembenaran upaya mungkin lebih sulit dibandingkan dengan open source atau perangkat lunak internal di mana kepentingan lokal pengembang atau pengguna dapat membiasakan upaya implementasi.

Mampu mengirimkan perpustakaan standar yang dioptimalkan dengan prosesor memang memiliki daya tarik yang signifikan. Penyimpanan dan eksekusi pustaka standar platform dapat dioptimalkan secara signifikan oleh perangkat lunak-perangkat kode. Perbedaan antara instruksi yang kompleks dan panggilan Platform Abstraction Layer bisa halus (atau tidak ada). Desain RISC dapat menggunakan teknik implementasi yang sama untuk menangani panggilan PAL seperti halnya CISC untuk instruksi yang kompleks, termasuk menggunakan operasi yang tidak disediakan dalam set instruksi umum dengan perangkat keras khusus, menggunakan caching dan decoding yang pintar, dan menentukan operan register (meskipun CISC akan sering menggunakan register khusus mirip dengan ABI per-fungsi). Model mental yang terkait dengan CISC dapat mendorong optimalisasi tersebut. Selain itu, pengguna mungkin kurang tersinggung oleh dimasukkannya paksa "

Decoding instruksi yang relatif kompleks dapat memiliki overhead yang lebih sedikit (dan mungkin lebih tepat benar dalam niat membedakan) daripada teknik RISC pengenalan idiom yang sebanding di mana urutan instruksi diakui sebagai unit semantik. Perbedaan overhead ini akan paling terlihat dalam implementasi yang lebih kecil, tetapi overhead untuk menggunakan informasi ini mengurangi pentingnya penghematan dekode.

Informasi kontekstual tambahan dapat memfasilitasi optimasi perangkat keras. Misalnya, ketika menambah nilai dalam memori, perangkat keras dapat mengenali bahwa alamat memori digunakan dua kali (untuk memuat dan menyimpan) memberikan peluang untuk memoisasi cara cache dan caching terjemahan. Instruksi kompleks dapat memberikan informasi semacam itu secara eksplisit. Dalam instruksi yang kompleks, nilai-nilai perantara memiliki masa pakai yang eksplisit (yaitu instruksi); dengan nilai register RISC tradisional harus secara eksplisit ditimpa untuk menunjukkan akhir kehidupan. (Catatan: RISC dapat menentukan register yang selalu di-zeroed setelah setiap kali digunakan, menyediakan cara untuk menentukan nilai sementara sekali pakai. Instruksi semacam itu akan cukup kompleks.)

Jika detail implementasi tidak tersembunyi di balik lapisan abstraksi, menjadi lebih sulit untuk menggunakan arsitektur mikro yang berbeda untuk mengoptimalkan pengorbanan yang berbeda. Mengungkap detail mikroarsitektur sebagai jaminan arsitektur mengunci mikroarsitektur ke dalam jaminan yang kompatibel. Sementara perangkat lunak PAL dapat dioptimalkan sama dengan instruksi yang kompleks, seperti membutuhkan tanda perangkat keras-perangkat lunak. Pemisahan dan keragaman organisasi membuat kode lebih sulit.

Instruksi kompleks dapat memberikan akses yang dijaga ke status istimewa. Sebagai contoh, instruksi yang kompleks seringkali berupa atom sehubungan dengan interupsi. Sementara set instruksi RISC dapat menyediakan mekanisme tingkat pengguna untuk menangguhkan interupsi sementara, bahkan mungkin sesuatu seperti tertaut-beban sehingga perangkat lunak secara eksplisit mencoba ulang operasi jika terganggu, menyediakan seperti itu tidak khas untuk RISC.

Demikian pula, instruksi yang kompleks dapat memberikan akses terkontrol dan / atau penggunaan informasi istimewa. Karena operasi yang dijalankan telah mengendalikan semantik, pelanggaran hak istimewa yang sebenarnya dapat dihindari. Alternatif berorientasi RISC termasuk kode PAL (yang biasanya memiliki overhead yang signifikan) dan akses tertutup ke register konfigurasi (atau salinan bayangan register) yang memiliki beberapa status istimewa. Memberikan solusi umum (RISC) lebih sulit daripada memberikan solusi untuk satu atau beberapa kasus khusus (CISC), tetapi lebih kuat dan kurang rentan terhadap akumulasi kasus khusus. Jika seseorang percaya bahwa kasus khusus yang penting sedikit, CISC bisa lebih menarik.

Instruksi kompleks juga dapat menyembunyikan status dari perangkat lunak. Salah satu keuntungan yang menonjol dari hal itu adalah untuk menyimpan dan memulihkan konteks. Dengan instruksi yang menyimpan dan memulihkan keadaan, arsitektur hanya perlu mengkomunikasikan ukuran konteks ke OS bukan mekanisme spesifik untuk mentransfer status ke memori. Ini memungkinkan aplikasi yang berjalan pada OS lama untuk menggunakan ekstensi ISA yang menambahkan status. (Sekali lagi, perangkat lunak PAL dapat menyediakan fungsionalitas yang sama.)


Sebagian besar kompleksitas x86 berasal dari kompatibilitas di banyak ekstensi. Dengan instruksi yang kompleks dan kurang ortogonal (berguna untuk kepadatan kode), menghapus beberapa pekerjaan yang ternyata tidak diperlukan secara umum, menghindari rantai ketergantungan yang tidak perlu (misalnya, hanya satu carry bit, hanya satu register jumlah shift dinamis), menambahkan beberapa pekerjaan yang berubah untuk digunakan secara umum dan yang dapat dioptimalkan dalam instruksi yang kompleks - semua ini membutuhkan penambahan instruksi baru dan membuat ISA kurang menyenangkan secara estetika.

Dalam banyak kasus, RISC tidak akan menghadapi masalah seperti itu karena instruksi sangat ortogonal dan primitif. Dalam beberapa kasus, RISC mungkin perlu menambahkan primitif baru tetapi biasanya akan berlaku untuk lebih dari satu penggunaan.

Selain itu, begitu infrastruktur tersedia untuk mendukung instruksi yang kompleks, hambatan dikurangi untuk instruksi tambahan yang rumit. Artinya, banyak dari biaya instruksi kompleks dalam non-berulang. ISA RISC yang sangat kuat mengalami hambatan untuk memperkenalkan fitur-fitur CISCy.

Frekuensi perpanjangan x86 mungkin juga sebagian dikaitkan dengan popularitasnya untuk komputasi tujuan umum dan model prosesor pedagang (ini juga meningkatkan pentingnya kompatibilitas biner). ISA RISC sering dikaitkan dengan vendor sistem yang mendorong fokus yang lebih sempit pada aplikasi dan kurangnya persaingan untuk implementasi RISC ISA tertentu agak mengecilkan penggunaan ekstensi set instruksi untuk pemasaran. Popularitas juga membuat biaya pengembangan ekstensi baru kurang signifikan (biaya tidak berulang kurang penting pada volume yang lebih tinggi).

Filosofi kompatibilitas x86 mungkin juga bias terhadap perluasan mekanisme yang ada daripada memberikan istirahat yang lebih bersih yang berarti bahwa fitur baru lebih dipengaruhi oleh fitur yang ada. Frekuensi ekstensi yang lebih tinggi juga mendorong lebih banyak perubahan bertahap, yang mendorong mekanisme penggunaan kembali, cenderung mengurangi ortogonalitas.

Membandingkan presentasi akademik MIPS klasik (yang merupakan bagian dari MIPS versi modern dan mengecualikan berbagai ekstensi ISA opsional) ke x86 modern (yang melacak kompatibilitas biner kembali ke 16-bit 8086 dan kompatibilitas kuasi tingkat perakitan lebih jauh ke belakang) dengan semua bagasi historisnya tidak memberikan kasus terbaik untuk CISC atau kasus realistis untuk RISC.

Paul A. Clayton
sumber
-1

Tepat sebelum ada Konfigurasi Set Instruksi Berkurang ada Konfigurasi Set Instruksi. Mereka memiliki aplikasi mereka. khususnya dalam transfer blok memori yang sangat besar dengan chipset berkapasitas tinggi, yang hanya akan membutuhkan 4-16 byte untuk mentransfer seluruh halaman video, bukan panjang untuk selamanya. yang berubah dan RISC menjadi status quo karena set chip menjadi lebih canggih, seperti GPU luar biasa yang ditemukan di kartu video kelas atas.

SkipBerne
sumber
-2

CISC cpu memiliki kelebihan lebih dari RISC. Karena CISC menggunakan lebih sedikit register perangkat keras dan gerbang XNOR / XOR daripada RISC berkali-kali !!!! Bayangkan byte instruksi dalam CISC akan dieksekusi-urutan, hanya ada satu gerbang logika dan register digunakan. Jika 1 bilion transistor dapat menghasilkan sekitar 300 juta gerbang logika, maka Anda dapat memproses 300 juta operator atau proses (JIKA, sama, matematika, variabel, menangani ... dll) dan lebih banyak program dapat berjalan di CISC. Tetapi dalam RISC, dibutuhkan belasan kali gerbang logika untuk menjalankan program dalam desain pipelined. Jadi 300 juta x 50 kali (50 instruksi) + 15000000000 bit counter !!! dalam apa yang disebut RISC. CISC menggunakan lebih banyak perangkat keras untuk mengurangi perangkat lunak algothrim yang memperlambat cpu.

Lan ...
sumber