Bagaimana prosesor menjalankan lebih banyak IPS daripada frekuensinya? [duplikat]

14

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 .

Jaca
sumber
3
Lihatlah Wikipedia untuk kata-kata buzz seperti pemipaan, arsitektur skalar super, eksekusi tidak sesuai pesanan, multithreading simultan, multi-core, ekstensi vektor (SSE, ..., AVX), caching, dan sebagainya. Secara keseluruhan, nilai CPI bisa lebih rendah dari 1,0.
Paebbels
7
Anda berarti 9 GIPS untuk Pentium 4, bukan MIPS, bukan?
Calimo
5
Promosi diri: Bagaimana CPU dapat mengirimkan lebih dari satu instruksi per siklus? diminta di Pertukaran Rekayasa Stack Listrik (jawaban saya diterima dan mungkin terlalu sangat tervotasikan).
Paul A. Clayton
Saya selalu bertanya-tanya, haruskah saya tidak memilih sesuatu jika sudah setinggi yang saya pikir seharusnya? Atau selalu upvote jika saya pikir upaya dan kualitas posting layak mendapat hadiah?
Peter Cordes
@PeterCordes Ada beberapa filosofi pemungutan suara. Beberapa mengklaim "berguna" adalah satu-satunya kriteria, yang lain menganggap jasa relatif (untuk jawaban). Saya cenderung mempertimbangkan penghitungan suara absolut ("bagus", "baik", "lencana pos" menyiratkan hal itu harus dipertimbangkan) serta penghitungan suara relatif (yang membantu menjawab peringkat). Anehnya Meta.SE tampaknya tidak memiliki banyak tentang topik ini dan " Bagaimana saya harus memilih? " Bahkan tidak punya jawaban!
Paul A. Clayton

Jawaban:

23

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.

masukkan deskripsi gambar di sini

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.

Mokubai
sumber
Saya tidak pernah tahu bahwa ada unit eksekusi khusus, dan lebih dari satu dari mereka. Tapi tetap saja, akan menyenangkan untuk memiliki Arduino superscalar. Saya tidak akan keberatan dengan kebutuhan daya dan pendinginan jika itu berarti lebih banyak throughput. Terima kasih atas jawabannya.
Jaca
1
Jika Anda ingin prosesor superscalar, gunakan satu. Tetapi Arduinos menempati ceruk untuk orang-orang yang keberatan dengan kebutuhan daya dan pendinginan (dan biaya dan kompleksitas) prosesor superscalar.
David Schwartz
4

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 .

misha256
sumber
3

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.

Peter Cordes
sumber
-2

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.

Roy
sumber
Itu sedikit dekat dengan cara kerja CPU sebenarnya, tetapi mengambil beberapa insn mesin per siklus hanyalah bagian dari cara kerja CPU superscalar. (dan panjang insns rata-rata lebih seperti 4 byte, untuk x86.) Saluran pipa dalam berarti bahwa instruksi yang diambil sekarang mungkin tidak selesai dieksekusi selama 15 siklus (atau lebih lama, jika ditunda oleh cache yang ketinggalan, tetapi instruksi yang tidak bergantung bisa tetap jalankan.) Penjelasan Anda sama sekali tidak menjelaskan desain pipelined. Juga tidak jelas apa yang Anda pikirkan perbedaannya antara 8bit 8086 add al, bldan 80386 add eax, ebx.
Peter Cordes