Berapa banyak siklus clock yang dilakukan oleh instruksi RISC / CISC untuk dieksekusi?

13

Menurut Desain Digital dan Arsitektur Komputer oleh Harris dan Harris, ada beberapa cara untuk mengimplementasikan prosesor MIPS, termasuk yang berikut:

The single-siklus mikroarsitektur mengeksekusi seluruh instruksi dalam satu siklus. (...)

The multicycle mikroarsitektur mengeksekusi instruksi dalam serangkaian siklus yang lebih pendek. (...)

The mikroarsitektur pipelined berlaku pipelining untuk mikroarsitektur single-siklus.

Arsitektur sering diklasifikasikan sebagai RISC atau CISC. Dari RISC vs CISC :

Prosesor RISC hanya menggunakan instruksi sederhana yang dapat dieksekusi dalam satu siklus clock.

Karena MIPS adalah arsitektur RISC, saya sedikit bingung dengan definisi di atas dan bertanya-tanya apakah tidak ada semacam kontradiksi di antara mereka. Lebih spesifik:

  1. Jika instruksi RISC dapat dipecah menjadi siklus yang lebih pendek (Ambil, Dekode, ...), bagaimana kita dapat mengatakan bahwa hanya dibutuhkan satu siklus clock untuk menjalankan seluruh instruksi? Bukankah perlu satu siklus waktu untuk menjalankan setiap langkah?
  2. Apakah benar - benar membutuhkan satu siklus clock untuk menjalankan satu instruksi RISC? Apa yang terjadi, misalnya, jika terjadi kesalahan cache dan prosesor harus menunggu DRAM yang lambat? Tidakkah ini harus memperpanjang eksekusi instruksi dengan sedikit?
  3. Apa sebenarnya satu siklus instruksi? Apakah ini waktu yang diperlukan untuk menyelesaikan satu instruksi (yaitu satu / beberapa siklus clock)?
  4. Berapa lama satu instruksi CISC mengambil dalam siklus clock / instruksi?

sumber
2
Biasanya tidak kurang dari satu :-).
Russell McMahon

Jawaban:

22

Definisi praktis RISC dan CISC begitu kacau dan kabur sekarang mereka hampir tidak ada artinya. Sekarang yang terbaik untuk menganggap mereka lebih banyak tentang "filsafat", dalam arti bahwa arsitektur CISC memiliki set instruksi yang lebih kaya dengan instruksi individu yang lebih kuat (misalnya DIV dan sejenisnya) sementara set instruksi RISC adalah tulang telanjang dan cepat, dan menyerahkannya ke kompiler untuk mengimplementasikan operasi yang kompleks. Bahkan set instruksi CISC yang konon (seperti x86) diterjemahkan ke dalam instruksi internal baik dalam chip Intel maupun AMD dan diimplementasikan lebih seperti prosesor RISC. Untuk menjawab pertanyaan Anda:

  1. Prosesor RISC akademik asli (dan saya pikir mungkin versi komersial pertama) memang menjalankan satu instruksi per siklus, termasuk mengambil dan memecahkan kode. Ini dimungkinkan karena datapath sangat bersih karena operasi setiap tahap sederhana dan terdefinisi dengan baik. (tradeoff di sini hanya instruksi yang sangat sederhana yang dapat diterapkan dengan cara ini). Setelah itu menghantam dunia nyata hal menjadi kabur. Hal-hal seperti pipelining dan arsitektur superscalar membuat dikotomi RISC / CISC sederhana menjadi tidak mungkin.

  2. Chip RISC asli berusaha untuk mengeksekusi satu instruksi per siklus dan mereka dapat melakukannya jika data tersedia dalam file register. Tentu saja jika prosesor harus pergi ke DRAM itu akan memakan waktu (banyak) lebih lama. RISC adalah tentang "berusaha" untuk menjalankan instruksi per siklus.

  3. Satu siklus instruksi adalah waktu yang dibutuhkan antara pengambilan.

  4. In sangat tergantung pada instruksi dan set instruksi arsitektur. Bahkan dalam arsitektur CISC beberapa instruksi dapat dijalankan dengan sangat cepat (seperti misalnya bergeser ke kiri atau kanan). Beberapa dijalankan dengan sangat lambat (10 detik siklus atau lebih). Arsitektur VAX (mungkin puncak filosofi CISC) memiliki instruksi yang sangat kompleks. Kebetulan, arsitektur CISC biasanya lebih mudah diprogram dalam perakitan daripada arsitektur RISC karena hampir seperti bahasa tingkat tinggi!

crgrace
sumber
5

Jawaban singkatnya

  1. Langkah-langkah dalam decoding dan mengeksekusi instruksi dieksekusi secara paralel dengan langkah selanjutnya dari instruksi sebelumnya. Teknik ini dikenal sebagai pipelining. Lihat Pada Prosesor RISC di bawah ini.

  2. Arsitektur RISC satu masalah biasanya akan rata-rata sedikit kurang dari satu instruksi per siklus karena status tunggu dan waktu yang dibutuhkan untuk operasi load / store yang menekan memori daripada hanya mendaftar untuk mendaftar. Slot keterlambatan memberi Anda pengait arsitektur yang memungkinkan Anda mendapatkan sebagian dari waktu ini kembali. Lihat Pada prosesor RISC di bawah ini.

  3. Siklus instruksi adalah lamanya waktu yang dibutuhkan untuk menjalankan instruksi. Ini akan berbeda dengan arsitektur dan (dalam beberapa kasus) instruksi. Misalnya, sebagian besar instruksi pada sesuatu seperti MIPS R2000 / 3000 mengambil satu siklus. Instruksi yang melibatkan akses memori (memuat / menyimpan, cabang) membutuhkan lebih dari satu siklus, meskipun slot penundaan berarti Anda mungkin dapat menjalankan sesuatu yang lain (mungkin hanya NOP) di slot penundaan. Arsitektur non-pipa dapat memiliki siklus instruksi dari beberapa siklus clock, seringkali berbeda dengan mode pengalamatan. Lihat Pada prosesor RISC, arsitektur CISC Tradisional dan Arsitektur yang Dipasang di Bawah ini .

    Desain multi-isu dapat mengaburkan konsep ini dengan mengeksekusi lebih dari satu instruksi secara paralel.

  4. Prosesor CISC dapat memiliki instruksi yang membutuhkan waktu yang bervariasi. Jumlah pasti siklus jam tergantung pada arsitektur dan instruksi. Beragamnya jumlah clock cycle yang diambil pada CISC ISA adalah salah satu alasan mengapa mereka sulit untuk dibangun ke dalam arsitektur yang disalurkan melalui pipa. Lihat arsitektur CISC Tradisional di bawah ini.

Jawaban yang lebih panjang

Untuk MIPS masalah tunggal, SPARC atau CPU lainnya, semua (untuk perkiraan pertama) mengeluarkan instruksi dalam satu siklus, meskipun mereka dapat memiliki sesuatu yang dikenal sebagai 'slot keterlambatan.'

Pada Prosesor RISC

Dalam konteks ini, satu masalah CPU adalah satu di mana CPU tidak melakukan analisis ketergantungan on-the-fly dan paralel mengeluarkan instruksi seperti CPU modern, yaitu mereka hanya memiliki satu unit eksekusi yang mengeksekusi instruksi dalam urutan mereka dibaca dari memoty. Lebih lanjut tentang ini nanti.

Sebagian besar prosesor RISC yang lebih lama adalah desain satu masalah, dan jenis ini masih banyak digunakan dalam sistem embedded. Inti RISC integer 32-bit masalah tunggal dapat diimplementasikan di sekitar 25.000-30.000 gerbang, sehingga inti CPU jenis ini memiliki konsumsi daya yang sangat rendah dan jejak kaki yang sangat kecil. Ini membuatnya mudah dan murah untuk diintegrasikan ke dalam produk SOC (system-on-chip).

RISC desain CPU pipelined - pemrosesan instruksi dilakukan dalam beberapa tahap, dengan setiap instruksi diturunkan pipa ke tahap berikutnya setiap siklus clock. Dalam kebanyakan kasus, CPU pipelined masalah tunggal akan mengeksekusi sesuatu yang dekat dengan satu instruksi per siklus clock.

Beberapa arsitektur memiliki instruksi seperti percabangan atau memuat / menyimpan dari memori di mana siklus tambahan yang diambil oleh akses memori terlihat oleh kode.

Misalnya, dalam desain SPARC V7 / V8 instruksi berikutnya setelah cabang benar-benar dieksekusi sebelum cabang itu sendiri terjadi. Biasanya Anda akan meletakkan NOP ke dalam slot setelah cabang tetapi Anda bisa memasukkan instruksi lain ke dalamnya jika Anda bisa menemukan sesuatu yang berguna untuk dilakukan.

Arsitektur MIPS R2000 / R3000 memiliki slot penundaan yang serupa dalam instruksi memuat / menyimpan. Jika Anda memuat nilai dari memori, itu tidak akan benar-benar muncul di register untuk siklus lain. Anda dapat meletakkan NOP di slot atau melakukan sesuatu yang lain jika Anda dapat menemukan sesuatu yang bermanfaat untuk dilakukan yang tidak bergantung pada operasi beban yang baru saja dikeluarkan.

Jika memori lebih lambat dari CPU, yang sering terjadi, Anda mungkin mendapatkan status tunggu tambahan pada akses memori. Status tunggu, diamkan CPU untuk satu atau beberapa siklus jam sampai akses memori selesai. Dalam praktiknya, status tunggu ini dan waktu ekstra untuk mengakses memori berarti bahwa desain CPU satu masalah rata-rata sedikit kurang dari satu instruksi per siklus clock. Delay slot memberi Anda beberapa peluang yang memungkinkan untuk mengoptimalkan kode dengan menjalankan beberapa instruksi lain saat operasi memori berlangsung.

Prosesor CISC tradisional

Prosesor CISC adalah desain yang dapat memiliki instruksi yang memakan banyak waktu. Seringkali mereka memiliki instruksi yang lebih kompleks diimplementasikan secara langsung dalam perangkat keras yang harus dilakukan dalam perangkat lunak pada CPU RISC.

Kebanyakan arsitektur mainframe dan hampir semua desain PC hingga M68K dan intel 386 adalah CPU CISC mikrokode tradisional. Desain ini terbukti lebih lambat per-jam dan menggunakan lebih banyak gerbang daripada CPU RISC.

Mikrokode

Contoh arsitektur mikrokode (MOS 6502) dapat dilihat dalam persaingan di sini . Mikrokode dapat dilihat di bagian atas gambar.

Mikrokode mengontrol aliran data dan tindakan yang diaktifkan dalam CPU untuk menjalankan instruksi. Dengan mengulangi langkah-langkah dalam mikrokode Anda dapat mengaktifkan bagian-bagian dari CPU, memindahkan data melalui ALU atau melakukan langkah-langkah lain. Komponen yang dapat digunakan kembali dalam CPU dapat dikoordinasikan melalui beberapa siklus clock untuk menjalankan instruksi. Dalam kasus 6502 beberapa tindakan pipelined juga dapat dieksekusi oleh mikrokode.

Desain mikrokodekan menggunakan lebih sedikit silikon daripada chip berkabel dengan mengorbankan kemungkinan mengambil beberapa siklus clock untuk menyelesaikan instruksi. Tergantung pada desainnya, CPU ini akan memakan waktu yang bervariasi untuk setiap instruksi.

Arsitektur bawaan

Desain bawaan (tidak harus saling eksklusif dengan mikrokode) melaksanakan instruksi secara serempak, atau mungkin memiliki koordinator sendiri untuk melakukan sesuatu melintasi beberapa siklus clock. Mereka biasanya lebih cepat dengan mengorbankan perangkat keras yang lebih berdedikasi dan karenanya lebih mahal untuk diimplementasikan daripada desain mikrokode dengan fungsi yang setara.

Sebuah contoh terkenal dari hal ini adalah CPU Amdahl 470/6 asli , yang merupakan pengganti drop-in untuk CPU pada model IBM System / 370 tertentu. CPU Amdahl adalah desain bawaan pada saat CPU 370 IBM banyak didasarkan pada mikrokode. CPU Amdahl sekitar 3 kali lebih cepat dari CPU IBM yang mereka gantikan.

Tidak perlu dikatakan, IBM tidak merasa geli dan ini mengakibatkan pertarungan pengadilan yang akhirnya memaksa IBM untuk membuka arsitektur mainframe mereka sampai keputusan persetujuan berakhir beberapa tahun yang lalu.

Biasanya, desain bawaan jenis ini masih tidak secepat jam-ke-jam seperti CPU RISC karena pengaturan waktu dan format instruksi yang berbeda tidak memungkinkan ruang lingkup untuk pemipaan seperti halnya desain RISC.

Desain berganda

Sebagian besar CPU modern adalah beberapa arsitektur masalah yang dapat memproses lebih dari satu instruksi pada satu waktu dalam satu utas. Chip dapat melakukan analisis ketergantungan dinamis pada aliran instruksi yang masuk dan mengeluarkan instruksi secara paralel di mana tidak ada ketergantungan pada hasil perhitungan sebelumnya.

Throughput chip ini tergantung pada seberapa banyak paralelisme dapat dicapai dalam kode tetapi kebanyakan CPU modern akan rata-rata beberapa instruksi per siklus pada sebagian besar kode.

Intel modern dan CPU x86 / X64 ISA lainnya memiliki lapisan yang menginterpretasikan instruksi CISC sekolah lama yang diatur ke dalam instruksi mikro yang dapat diumpankan melalui inti masalah multi-gaya RISC yang telah dipaketkan. Ini menambahkan beberapa overhead yang tidak ada pada CPU dengan ISA yang dirancang untuk pipelining (yaitu arsitektur RISC seperti ARM atau PowerPC).

Desain VLIW

Desain VLIW, di mana Intel Itanium mungkin yang paling terkenal, tidak pernah lepas landas sebagai arsitektur utama, tetapi IIRC ada sejumlah arsitektur DSP yang menggunakan jenis desain ini. Desain VLIW membuat multi-isu eksplisit dengan kata instruksi yang berisi lebih dari satu instruksi yang dikeluarkan secara paralel.

Ini tergantung pada kompiler optimisasi yang baik, yang mengidentifikasi dependensi dan peluang untuk paralelisme, menjatuhkan instruksi ke dalam banyak slot yang tersedia pada setiap kata instruksi.

Arsitektur VLIW bekerja cukup baik untuk aplikasi numerik karena operasi matriks / array cenderung menawarkan peluang untuk paralelisme yang luas. Itanium memiliki ceruk pasar dalam aplikasi superkomputer untuk sementara waktu, dan setidaknya ada satu arsitektur superkomputer - Multiflow TRACE - diproduksi menggunakan ISA jenis ini.

Memori dan caching

CPU modern jauh, jauh lebih cepat daripada memori, sehingga pembacaan langsung dari memori dapat menghasilkan ratusan status tunggu yang memblokir CPU hingga akses memori selesai. Caching, sekarang dilakukan dalam beberapa lapisan, menyimpan lokasi memori yang paling baru digunakan dalam cache. Karena CPU biasanya menghabiskan sebagian besar waktu mengeksekusi kode dalam loop ini berarti Anda mendapatkan tingkat hit yang baik menggunakan kembali lokasi memori yang telah Anda gunakan baru-baru ini. Properti ini disebut 'lokalitas referensi.'

Di mana Anda mendapatkan referensi lokalitas, CPU dapat beroperasi dengan kecepatan optimal. Tembolok merindukan ke tingkat berikutnya menimbulkan sejumlah status tunggu; cache hilang hingga memori utama dapat menyebabkan ratusan.

Dengan demikian, throughput aktual dari chip CPU dapat sangat bergantung pada efisiensi pola akses memori. Seluruh buku telah ditulis tentang mengoptimalkan kode untuk ini, dan ini adalah topik yang kompleks.

ConcernedOfTunbridgeWells
sumber
3

Ini penyederhanaan bagi siswa.

Setiap prosesor non-sepele adalah pipelined. Ada unit prefetch menyekop instruksi di satu ujung, sejumlah unit eksekusi di tengah melakukan pekerjaan yang sebenarnya, dan unit masalah yang bertanggung jawab untuk mendeklarasikan instruksi selesai setelah menulis untuk mendaftar atau memori selesai. Jika ada beberapa unit eksekusi (katakanlah, ALU integer, ALU titik mengambang, dan unit vektor) dimungkinkan untuk mengeluarkan (kadang-kadang disebut "pensiun") beberapa instruksi per siklus clock. Bagaimana CPU dapat mengirimkan lebih dari satu instruksi per siklus? membahas lebih detail tentang ini.

Seperti yang Anda katakan, bagaimana jika ada penundaan keterlambatan cache? Intel Hyperthreading adalah solusi baru untuk ini: dua banyak register status CPU, satu banyak logika kontrol dan unit masalah. Segera setelah satu CPU virtual berhenti, tukar ke kondisi yang lain. (Ini adalah penyederhanaan yang berlebihan itu sendiri)

Hasil dari ini adalah bahwa manual CPU modern memberikan banyak waktu instruksi yang lebih samar, dan jauh lebih sulit untuk menulis kode timing yang akurat, jika misalnya Anda mencoba untuk output video secara real time dari perangkat keras yang seharusnya tidak mampu melakukannya .

(Jawaban khusus untuk "Berapa lama satu instruksi CISC mengambil jam / siklus instruksi?" Adalah "lihat di manual referensi pabrikan dan akan ada timing per instruksi")

pjc50
sumber
0

Orang-orang lain telah menulis banyak materi bagus, jadi saya akan menjawab singkat: Di masa lalu, (1980 di sini), prosesor 8 bit hari (6800, 6502, Z80, 6809 dan lain-lain) dianggap CISC. Beberapa instruksi dapat dijalankan dalam 2 clock cyles tetapi ini adalah instuctions sederhana seperti pengaturan / pembersihan bit bendera dalam register status prosesor. Instruksi lain dapat berlangsung dari 2-6 dan bahkan hingga 9 siklus clock untuk dijalankan. Prosesor ini memiliki beberapa instruksi yang cukup kuat, Z80 memiliki beberapa instruksi pembersihan blok memori yang akan menulis nilai yang sama ke serangkaian byte dalam memori, secara efektif membersihkan blok besar dalam satu instruksi, hanya menyiapkan beberapa register dan menjalankan Instruksi LDIR (muat, tambah, dan ulangi).

Prosesor 6502 (dari memori) memiliki 56 instruksi tetapi 13 mode pengalamatan menciptakan satu set instruksi yang kuat.

RISC datang lama dan mengadopsi pendekatan yang berbeda, memiliki beberapa instruksi yang semuanya dijalankan dalam satu siklus clock tunggal. Program cenderung lebih lama dan menempati lebih banyak memori karena instruksi sederhana dalam operasi apa yang mereka lakukan sehingga Anda membutuhkan lebih banyak.

Jika saya ingat dengan benar upaya pertama pada arsitektur RISC adalah prosesor transputer atau Acorn Risc?

Dekan
sumber
Bisa dibilang arsitektur tipe RISC pipelined pertama adalah CDC 6600 yang dirancang oleh Seymour Cray. Itu beberapa dekade sebelum istilah RISC digunakan secara luas. MIPS, ARM dan beberapa desain mikroprosesor RISC lainnya kembali ke periode 1980-1985 dengan perangkat keras komersial pertama yang menggunakan chip ini keluar sekitar pertengahan 1980-an.
ConcernedOfTunbridgeWells
Masing-masing chip transputer cukup cepat, tetapi jenis arsitekturnya tidak sama dengan yang biasanya diasosiasikan dengan chip RISC. en.wikipedia.org/wiki/Transputer#Architecture
ConcernedOfTunbridgeWells
Saya punya beberapa transputer dalam kasus anti-statis, hanya bagian dari koleksi mikroprosesor sejarah. Tidak pernah menggunakannya, akan sangat menyenangkan di masa itu untuk bereksperimen dengan mereka.
Dean
@ConcernedOfTunbridgeWells Saya baru saja melihat set instruksi CDC 6600. Sementara desain tampaknya mewujudkan (dan mengantisipasi) beberapa prinsip RISC, instruksi pembagian titik apung membutuhkan 29 siklus untuk dijalankan! Dan dimasukkannya instruksi pembagian itu bertentangan dengan prinsip-prinsip RISC yang khas, tetapi terima kasih atas komentar yang sangat menarik!
crgrace
Atribut RISC-ish utama adalah instruksi yang diambil dari pipeline dengan mekanisme decode / decode / eksekusi dan arsitektur load-store (yaitu tidak ada mode pengalamatan dengan akses memori implisit untuk menghitung alamat). Bahkan, beberapa set instruksi RISC (mis. IBM POWER) sebenarnya cukup besar tetapi masih menggunakan pendekatan load / store untuk memastikan waktu eksekusi yang konsisten.
ConcernedOfTunbridgeWells