Petunjuk Wikipedia per halaman kedua mengatakan bahwa i7 3630QM menghasilkan ~ 110.000 MIPS pada frekuensi 3,2 GHz; itu akan menjadi (110 / 3.2 instruksi) / 4 core = ~ 8.6 instruksi per siklus per inti ?! Bagaimana satu inti dapat memberikan lebih dari satu instruksi per siklus?
Untuk pemahaman saya, saluran pipa hanya bisa memberikan satu hasil per jam.
Ini adalah pikiran saya:
- Frekuensi internal sebenarnya lebih tinggi dari 3,2 GHz
- Beberapa bagian CPU tidak sinkron dengan cara yang tidak bisa dipahami oleh manusia yang rendah hati seperti saya
- Ada beberapa pipa bersamaan per inti
- Sebuah pipeline dapat mengirimkan lebih dari hasil per jam, sebuah instruksi dapat melewati tahapan pipeline dan ada beberapa prefetcher untuk mengikuti
- Saya kehilangan sesuatu
microprocessor
cpu
computer-architecture
tidak bisa bekerja
sumber
sumber
Jawaban:
Pertama, seperti komentar Keelan dan jawaban Turbo J menunjukkan, pengukurannya adalah 113.093 MIX Dhrystone bukan MIPS asli .
Mikroarsitektur Ivy Bridge pada i7 3630QM hanya dapat melakukan 4 µop menyatu per siklus, meskipun ia dapat memulai eksekusi 6 µops per siklus. (Jumlah µop yang menyatu dalam jejak kode kira - kira sama dengan jumlah instruksi; beberapa instruksi kompleks didekodekan menjadi beberapa µops yang tidak menyatu dan beberapa pasangan instruksi dapat digabungkan menjadi µop tunggal, misalnya, segera membandingkan diikuti oleh lompatan bersyarat.)
Dua dari spekulasi Anda tentang bagaimana beberapa instruksi dapat dieksekusi dalam satu siklus cukup valid dan telah digunakan dalam prosesor aktual. Spekulasi pertama Anda, bahwa jam internal yang lebih cepat digunakan, digunakan dalam ALU "bola api" Pentium 4 yang asli. ALU ini memiliki frekuensi dua kali lipat dari sisa inti, yang sudah relatif tinggi.
(Ini dicapai dengan menggunakan ALU terhuyung-huyung di mana bagian bawah tambahan dilakukan dalam satu siklus, yang memungkinkan operasi bergantung untuk menggunakan bagian bawah dari hasil dalam siklus berikutnya. Untuk operasi seperti menambah, xor, atau shift kiri yang hanya membutuhkan separuh operan yang lebih rendah untuk menghasilkan separuh yang lebih rendah dari hasilnya, guncangan seperti itu — juga dikenal sebagai pipeline-lebar — memungkinkan latensi hasil siklus tunggal dan juga throughput siklus tunggal.)
Teknik yang agak terkait, cascade ALUs, digunakan oleh HyperSPARC. HyperSPARC memasukkan hasil dari dua ALU menjadi ALU ketiga. Ini memungkinkan dua operasi independen dan bergantung ketiga dijalankan dalam satu siklus tunggal.
Spekulasi Anda bahwa "ada beberapa pipa bersamaan per inti" adalah teknik lain yang telah digunakan. Jenis desain ini disebut superscalar dan sejauh ini merupakan cara yang paling umum untuk meningkatkan jumlah operasi yang dilakukan dalam satu siklus tunggal.
Ada juga beberapa peluang dan akhir eksekusi instruksi lainnya yang mungkin perlu diperhatikan. Beberapa operasi dapat lebih efisien dilakukan di luar unit eksekusi biasa. Teknik penghapusan langkah mengeksploitasi penggunaan pengubahan nama register pada prosesor out-of-order untuk melakukan operasi pemindahan selama pengubahan nama register; langkah ini cukup menyalin nomor register fisik dari satu posisi di tabel penggantian nama (disebut tabel register alias) ke yang lain. Tidak hanya ini secara efektif meningkatkan lebar eksekusi tetapi juga menghilangkan ketergantungan. Teknik ini digunakan awal dengan x87 berbasis stack, tetapi sekarang digunakan secara luas dalam prosesor x86 berkinerja tinggi Intel. (Penggunaan instruksi dua operan yang merusak di x86 membuat penghapusan gerakan lebih bermanfaat daripada di RISC biasa.)
Teknik yang mirip dengan memindahkan eliminasi adalah penanganan instruksi register zeroing selama penggantian nama. Dengan memberikan nama register yang memberikan nilai nol, instruksi kliring register (seperti xor atau kurangi dengan kedua operan menjadi register yang sama) dapat dengan mudah memasukkan nama itu ke dalam tabel penggantian nama (RAT).
Teknik lain yang digunakan oleh beberapa prosesor x86 mengurangi biaya operasi push dan pop. Biasanya sebuah instruksi menggunakan stack pointer harus menunggu siklus penuh untuk push atau pop sebelumnya untuk memperbarui nilai untuk stack pointer. Dengan mengenali bahwa push dan pop hanya menambah atau mengurangi nilai kecil ke stack pointer, seseorang dapat menghitung hasil dari beberapa penambahan / subtaksi secara paralel. Penundaan utama untuk penambahan adalah propagasi carry, tetapi dengan nilai kecil bit yang lebih signifikan dari nilai dasar — dalam hal ini stack pointer — hanya akan memiliki paling banyak satu carry-in. Ini memungkinkan pengoptimalan yang mirip dengan penambah carry-pilih untuk diterapkan pada beberapa tambahan nilai kecil. Selain itu, karena penunjuk tumpukan biasanya hanya diperbarui oleh konstanta,
Dimungkinkan juga untuk menggabungkan instruksi menjadi operasi tunggal yang lebih kompleks. Sementara proses kebalikan dari instruksi pemisahan menjadi beberapa, operasi yang lebih sederhana adalah teknik lama, menggabungkan instruksi (yang disebut Intel sebagai macro-op fusion) dapat memungkinkan implementasi untuk mendukung operasi yang lebih kompleks daripada yang diekspos dalam set instruksi.
Di sisi teoretis, teknik lain telah diusulkan. Konstanta kecil selain nol dapat didukung dalam RAT dan beberapa operasi sederhana yang menggunakan atau secara andal menghasilkan nilai sekecil itu dapat ditangani lebih awal. ("Physical Register Inlining", Mikko H. Lipasti et al., 2004, menyarankan penggunaan RAT sebagai cara untuk mengurangi jumlah register, tetapi gagasan tersebut dapat diperluas untuk mendukung pemuatan dengan segera kecil dan operasi sederhana dalam jumlah kecil.)
Untuk cache penelusuran (yang menyimpan urutan instruksi dengan asumsi aliran kontrol tertentu), dapat ada peluang untuk menggabungkan operasi yang dipisahkan oleh cabang dan menghapus operasi yang menghasilkan hasil yang tidak digunakan dalam penelusuran. Caching optimasi dalam cache jejak juga dapat mendorong dilakukannya optimasi seperti penggabungan instruksi yang mungkin tidak bermanfaat jika harus dilakukan setiap kali aliran instruksi diambil.
Prediksi nilai dapat digunakan untuk meningkatkan jumlah operasi yang dapat dieksekusi secara paralel dengan menghapus dependensi. Prediktor nilai berbasis langkah mirip dengan optimisasi sembulan / dorong dari mesin stack khusus yang disebutkan sebelumnya. Itu dapat menghitung banyak tambahan sebagian besar secara paralel, menghapus serialisasi. Ide umum prediksi nilai adalah bahwa dengan nilai prediksi, operasi dependen dapat berjalan tanpa penundaan. (Arah cabang dan prediksi target secara efektif hanya bentuk prediksi nilai yang sangat terbatas, memungkinkan pengambilan instruksi berikut yang bergantung pada "nilai" cabang — diambil atau tidak — dan alamat instruksi berikutnya, nilai lain.)
sumber
Beberapa sihir gelap terjadi di bagian dalam prosesor modern, tetapi pikiran Anda pasti sejalan.
Kunci untuk memahami efisiensi prosesor modern adalah menyadari bahwa mereka superscalar . Dari Wikipedia (penekanan pada saya):
Prosesor modern ini memiliki beberapa unit eksekusi per inti, seperti yang Anda duga. Hyper-threading menarik untuk dipertimbangkan, beberapa bagian dari pipa digandakan tetapi beberapa tidak.
Eksekusi out-of-order juga menarik untuk dibaca, tetapi tidak langsung menjawab pertanyaan Anda. Itu mengurangi jumlah siklus CPU "terbuang".
Efisiensi juga dipengaruhi oleh banyak hal lain yang dapat menyebabkan kios di dalam prosesor, termasuk (tapi jelas tidak terbatas pada):
Kompiler modern mencoba membantu dengan banyak item di atas, prosesor kemudian mengambil alih. Sebagai contoh yang baik lihat pertanyaan ini di tempat lain di Stackexchange, yang menyoroti perbedaan penting antara dua instruksi yang dapat melakukan hal yang sama (dalam beberapa keadaan). Namun satu dapat "lebih cepat" daripada yang lain pada beberapa prosesor karena unit eksekusi digunakan.
Untuk penjelasan yang dapat dibaca manusia tentang pipa CPU modern, lihat Perjalanan melalui pipa CPU . Untuk penjelasan agak lebih teknis lihat Agner Fog ini Microarchitecture kertas.
sumber
Apa yang Anda pikirkan terjadi: Semua insinyur di Intel, AMD, dan IBM membaca bahwa sebuah pipa hanya dapat memberikan satu hasil per siklus, dan mereka berkata "oh well, begitulah, tidak bisa membuat prosesor ini lebih cepat". Atau apakah mereka membaca ini dan berkata: "Tidak dapat memberikan lebih dari satu hasil per siklus? Kita akan melihat tentang itu!".
Sebagai pengantar yang bagus untuk arsitektur Haswell misalnya Anda dapat mengikuti tautan ini http://www.realworldtech.com/haswell-cpu/ atau Anda bisa langsung pergi ke situs web Intel dan Anda akan menemukan sedikit dokumentasi di sana.
Setiap inti dari prosesor Haswell memiliki sejumlah besar unit eksekusi, yang dapat melakukan operasi independen satu sama lain, sehingga beberapa operasi dapat dilakukan secara paralel. Selanjutnya, prosesor Haswell memiliki beberapa unit eksekusi yang menangani operasi vektor hingga 256 bit. Operasi vektor misalnya dapat melakukan empat operasi floating point presisi ganda atau delapan operasi floating point presisi tunggal dalam satu operasi vektor. Dan akhirnya, prosesor Haswell mendukung "penggandaan multiply-add", yang berarti menghitung kali b plus c hanya satu operasi.
Maksimum teoretis, karena Haswell memiliki dua unit yang mampu menggabungkan-tambah multipel, adalah dua operasi tambah-tambah gabungan per siklus, masing-masing operasi melakukan delapan perkalian presisi tunggal plus penambahan, atau 32 operasi floating-point presisi tunggal.
Prosesor 3630 tidak ada dalam daftar harga terbaru Intel, tetapi ada model seperti 3740QM dengan empat inti. Jadi, alih-alih 32, Anda bisa mendapatkan 128 operasi floating-point per siklus clock. Ini adalah maksimum teoretis. Mencapai setengah dari itu dalam kehidupan nyata adalah sebuah tantangan, tetapi bukan tidak mungkin untuk tugas yang sesuai. Ada prosesor lain yang tersedia dengan hingga 15 core (untuk harga yang bahkan fanatik game fanatik tidak akan membayar).
Jadi, Anda memiliki kombinasi beberapa pengganda:
8.6 operasi per siklus tidak terlalu sulit untuk dicapai. Bahkan 8,6 operasi per siklus per inti tidak terlalu sulit.
sumber
ADD
instruksi yang berbeda berdasarkan pada apakah overflow harus dibiarkan tidak terpengaruh, atau harus ditetapkan ketika overflow terjadi (dan dibiarkan diatur jika tidak).Patokan Drystone berasal dari tahun 1984, dan mesin MIX VAX nominal 1 yang sesuai tidak sangat efisien dalam hal modern. Bahkan Cortex M3 menghasilkan 1,25 DMPIS / MHz.
Prosesor Intel Core memang bisa menjalankan banyak instruksi secara paralel dalam satu inti, karena ada banyak unit komputasi yang hadir.
sumber
Saya belajar sangat banyak dari artikel karya Ars Technica, Jon "Hannibal" Stokes, yang sangat bagus dan ekstensif tentang arsitektur mikroprosesor. Artikel-artikelnya sedikit bertanggal (tampaknya berasal dari sekitar 2004), tetapi masih sangat relevan.
Beberapa tautan ke bagian selanjutnya dari sebuah artikel rusak, namun sepertinya Anda dapat memperbaikinya sendiri dengan membandingkan URL bagian pertama dan URL yang rusak pada halaman berikutnya (misalnya menambahkan suatu tempat
m-
di URL).(ya, ini adalah jawaban tautan saja yang dimuliakan, maaf; artikelnya terlalu bagus untuk tidak menyebutkannya)
sumber