Ini adalah sesuatu yang sepertinya tidak bisa saya lindungi. Hampir setiap prosesor modern mampu menjalankan lebih banyak instruksi per detik daripada frekuensinya.
Saya bisa mengerti mengapa prosesor kelas bawah dapat mengeksekusi IPS lebih sedikit daripada frekuensinya. Misalnya, ATmega328 mengeksekusi sekitar 16 MIPS pada 16 MHZ (atau setidaknya itulah yang telah saya katakan), dan Z80 mengeksekusi 0,5 MIPS pada 4 MHz. Namun, Pentium 4 Extreme dapat menjalankan lebih dari 9 GIPS dengan hanya 3,2 GHz. Itu sekitar tiga instruksi per siklus clock!
Bagaimana ini dilakukan, dan mengapa ini tidak diterapkan pada prosesor yang lebih kecil, seperti mikrokontroler AVR ?
Saya menemukan semua informasi saya, kecuali untuk ATmega328, dari sini .
Jawaban:
Ini disebabkan kombinasi fitur prosesor modern.
Hal pertama yang berkontribusi pada IPS tinggi adalah kenyataan bahwa prosesor modern memiliki beberapa unit eksekusi yang dapat beroperasi secara independen. Pada gambar di bawah ini (dipinjam dari Wikipedia: Intel Core Microarchitecture ) Anda dapat melihat di bagian bawah bahwa ada delapan unit eksekusi (ditunjukkan dengan warna kuning) yang semuanya dapat menjalankan instruksi secara bersamaan. Tidak semua unit tersebut dapat mengamankan jenis instruksi yang sama, tetapi setidaknya 5 di antaranya dapat melakukan operasi ALU dan ada tiga unit yang mampu SSE.
Gabungkan bahwa dengan pipa instruksi yang panjang yang dapat secara efisien menumpuk instruksi yang siap untuk unit-unit tersebut untuk melaksanakan instruksi ( rusak , jika perlu) berarti bahwa prosesor modern dapat memiliki sejumlah besar instruksi dengan cepat pada waktu tertentu.
Setiap instruksi mungkin memerlukan beberapa siklus clock untuk dijalankan, tetapi jika Anda dapat secara paralel melakukan eksekusi, maka Anda dapat memberi diri Anda dorongan besar untuk IPS dengan mengorbankan kompleksitas prosesor dan output termal.
Menyimpan pipa-pipa besar ini penuh dengan instruksi juga membutuhkan cache yang besar yang dapat diisi dengan instruksi dan data. Ini berkontribusi pada ukuran cetakan dan juga jumlah panas yang dihasilkan prosesor.
Alasan ini tidak dilakukan pada prosesor yang lebih kecil adalah karena secara substansial meningkatkan jumlah logika kontrol yang diperlukan di sekitar inti pemrosesan, serta jumlah ruang yang dibutuhkan dan juga panas yang dihasilkan. Jika Anda ingin prosesor kecil, daya rendah, sangat responsif maka Anda ingin pipa pendek tanpa terlalu banyak "ekstra" yang mengelilingi inti fungsional sebenarnya. Jadi biasanya mereka meminimalkan cache, membatasi hanya untuk satu dari setiap jenis unit yang diperlukan untuk memproses instruksi, dan mengurangi kompleksitas setiap bagian.
Mereka dapat membuat prosesor kecil serumit prosesor yang lebih besar dan mencapai kinerja yang serupa, tetapi kemudian kebutuhan daya dan pendinginan pendinginan akan meningkat secara eksponensial.
sumber
Tidak sulit untuk dibayangkan. Satu siklus adalah semua yang diperlukan untuk mengganti ribuan transistor. Selama instruksi disusun secara paralel, satu siklus bisa cukup untuk menjalankan semuanya.
Lebih baik daripada mencoba menjelaskannya sendiri, inilah titik awal yang baik .
sumber
Untuk mendapatkan sedikit lebih mendasar daripada jawaban Mokubai:
CPU Superscalar menganalisis aliran instruksi untuk dependensi data (dan lainnya) di antara instruksi. Instruksi yang tidak bergantung satu sama lain dapat berjalan secara paralel.
CPU desktop x86 tipikal mengambil 16 atau 32B instruksi setiap clock cycle. Intel mendesain karena Core2 dapat mengeluarkan hingga 4 instruksi per siklus. (Atau 5, jika ada cabang-dan-cabang yang bisa sekering makro).
Lihat jawaban bagus Mobukai untuk tautan dan detail tentang bagaimana CPU dalam praktiknya melakukan tugas mengekstraksi paralelisme tingkat instruksi sebanyak yang mereka lakukan dari kode yang mereka jalankan.
Juga lihat http://www.realworldtech.com/sandy-bridge/ dan artikel serupa untuk arsitektur CPU lainnya untuk penjelasan mendalam tentang apa yang ada di balik tudung.
sumber
Jawaban sebelumnya menunjukkan bagaimana seseorang mendapatkan lebih banyak instruksi yang dieksekusi oleh definisi prosesor tentang "instruksi" dan satu membayangkan bahwa sebenarnya maksud si penanya.
Tetapi sumber lain mungkin bahwa setiap "instruksi" sebenarnya sejumlah data diperlakukan sebagai input instruksi oleh prosesor. Jika penghitungan sumbernya hanya menghitung apa yang prosesor anggap sebagai instruksi, yang berikut ini tidak menambahkan apa pun. Tetapi jika sumbernya menghitung semua yang manusia sebut sebagai "instruksi," maka: Tambahkan bahwa tidak semua instruksi sama fisiknya dengan setiap instruksi lainnya (satu mungkin 12 byte, yang lain mungkin 56 byte, dll.). Jadi, jika memuat 64 byte materi setiap siklus sebagai "instruksi" (atau sebanyak instruksi lengkap yang bisa sebelum memukul 64 byte) dan satu memiliki enam instruksi dalam 64 byte itu, maka enam instruksi (seperti Anda dan saya mungkin menganggapnya ) akan selesai dalam siklus itu.
Karena banyak instruksi yang sangat dasar (definisi "masuk akal" kami) adalah sisa dari hari-hari awal dengan panjang instruksi 8 byte, dan instruksi yang sangat dasar, menurut definisi, mungkin digunakan secara tidak proporsional, hanya saja ini akan menjadi jalan panjang untuk memiliki lebih banyak "instruksi" dilakukan daripada frekuensi tampaknya memungkinkan.
sumber
add al, bl
dan 80386add eax, ebx
.