Saya telah belajar sedikit lebih banyak tentang cara kerja prosesor, tetapi saya belum dapat menemukan jawaban langsung tentang instruksi per siklus.
Sebagai contoh, saya mendapat kesan bahwa CPU empat inti dapat menjalankan empat instruksi per siklus, sehingga CPU empat inti yang berjalan pada 2GHz akan menjalankan 8 miliar operasi per detik. Apakah ini masalahnya?
Saya yakin itu terlalu menyederhanakan hal-hal, tetapi jika ada panduan atau sesuatu yang bisa saya gunakan untuk meluruskan diri, saya pasti terbuka untuk ide.
cpu
computer-architecture
Matt Simmons
sumber
sumber
Jawaban:
Kata kunci yang mungkin harus Anda cari adalah arsitektur CISC , RISC dan superscalar .
CISC
Dalam arsitektur CISC (x86, 68000, VAX) satu instruksi sangat kuat, tetapi dibutuhkan beberapa siklus untuk diproses. Dalam arsitektur yang lebih tua jumlah siklus telah diperbaiki, saat ini jumlah siklus per instruksi biasanya tergantung pada berbagai faktor (hit cache / miss, prediksi cabang, dll.). Ada meja untuk mencari barang-barang itu. Seringkali ada juga yang memfasilitasi untuk benar-benar mengukur berapa banyak siklus yang dibutuhkan instruksi tertentu dalam keadaan tertentu (lihat penghitung kinerja ).
Jika Anda tertarik pada detail untuk Intel, Manual Referensi Pengoptimalan Intel 64 dan IA-32 adalah bacaan yang sangat bagus.
RISC
Arsitektur RISC (ARM, PowerPC, SPARC) biasanya berarti satu instruksi yang sangat sederhana hanya membutuhkan beberapa siklus (seringkali hanya satu).
Superscalar
Tetapi terlepas dari CISC atau RISC ada arsitektur superscalar. CPU tidak memproses satu instruksi satu per satu tetapi sedang mengerjakan banyak instruksi secara bersamaan, sangat mirip dengan jalur perakitan.
Konsekuensinya adalah: Jika Anda hanya mencari siklus untuk setiap instruksi program Anda dan kemudian menambahkan semuanya, Anda akan berakhir dengan cara nomor ke tinggi. Misalkan Anda memiliki CPU RISC single core. Waktu untuk memproses satu instruksi tidak pernah kurang dari waktu satu siklus, tetapi throughput keseluruhan mungkin beberapa instruksi per siklus.
sumber
Cara saya suka memikirkannya adalah dengan analogi cucian. Instruksi CPU seperti banyak cucian. Anda harus menggunakan mesin cuci dan pengering untuk setiap beban. Katakanlah masing-masing membutuhkan waktu 30 menit untuk berlari. Itu adalah siklus jam. CPU lama akan menjalankan mesin cuci, kemudian menjalankan pengering, mengambil 60 menit (2 siklus) untuk menyelesaikan setiap beban cucian, setiap saat.
Pipelining: Pipeline adalah ketika Anda menggunakan keduanya pada saat yang sama - Anda mencuci beban, lalu saat pengeringan, Anda mencuci beban berikutnya. Beban pertama membutuhkan 2 siklus untuk menyelesaikan, tetapi beban kedua selesai setelah 1 siklus lagi. Jadi, sebagian besar beban hanya perlu 1 siklus, kecuali beban pertama.
Superscalar: Bawa semua cucian ke binatu. Dapatkan 2 mesin cuci dan muat keduanya. Setelah selesai, cari 2 pengering dan gunakan keduanya. Sekarang Anda dapat mencuci dan mengeringkan 2 beban dalam 60 menit. Itu adalah 2 beban dalam 2 siklus. Setiap beban masih membutuhkan 2 siklus, tetapi Anda dapat melakukan lebih dari itu sekarang. Waktu rata-rata sekarang adalah 1 beban per siklus.
Superscalar dengan Pipelining: Cuci 2 beban pertama, lalu selagi ini mengering, muat pencuci dengan 2 beban berikutnya. Sekarang, 2 muatan pertama masih membutuhkan 2 siklus, dan 2 sisanya selesai setelah 1 siklus lagi. Jadi, sebagian besar waktu, Anda menyelesaikan 2 beban di setiap siklus.
Multiple core: Berikan setengah dari cucian Anda kepada ibu Anda, yang juga memiliki 2 mesin cuci dan 2 pengering. Dengan Anda berdua bekerja bersama, Anda bisa menyelesaikan dua kali lebih banyak. Ini mirip dengan superscalar, tetapi sedikit berbeda. Alih-alih Anda harus memindahkan semua cucian ke dan dari masing-masing mesin sendiri, dia dapat melakukannya pada saat yang sama dengan Anda.
Ini hebat, kita bisa mencuci delapan kali lebih banyak dari sebelumnya dalam jumlah waktu yang sama, tanpa harus membuat mesin yang lebih cepat. (Gandakan kecepatan jam: Mesin cuci yang hanya perlu 15 menit untuk menjalankan.)
Sekarang, mari kita bicara tentang bagaimana kesalahannya:
Gelembung pipa: Anda memiliki noda yang tidak keluar dalam pencucian, jadi Anda memutuskan untuk mencucinya lagi. Sekarang pengering hanya duduk di sana, menunggu sesuatu untuk dilakukan.
Cache Miss: Truk yang mengantarkan cucian kotor macet di lalu lintas. Sekarang Anda memiliki 2 mesin cuci dan 2 pengering, tetapi Anda tidak mendapatkan pekerjaan karena Anda harus menunggu.
Bergantung pada seberapa sering kesalahan terjadi, kami tidak akan dapat selalu menyelesaikan 4 beban setiap siklus, sehingga jumlah pekerjaan aktual yang dilakukan dapat bervariasi.
Prediksi Cabang: Nah, Anda mulai mencuci pakaian bersih Anda jika Anda menodai mereka nanti jadi mereka sudah bersih ... oke, ini adalah di mana analogi itu rusak ...
sumber
Tidak persis. Siklus yang Anda maksud adalah siklus clock dan karena kebanyakan pipeline prosesor modern, diperlukan beberapa siklus clock untuk 1 instruksi untuk dijalankan. (Ini adalah hal yang baik karena memungkinkan instruksi lain untuk memulai eksekusi bahkan sebelum instruksi pertama selesai.) Dengan asumsi keadaan yang paling ideal, mungkin sekitar 8 miliar IPC, tetapi segala macam hal terjadi seperti dependensi, gelembung dalam pipa , cabang, dll. sehingga tidak selalu berhasil.
Maaf, terlalu rumit untuk jawaban langsung. Jon Stokes melakukan pekerjaan yang baik untuk menjelaskannya dengan artikel ini .
sumber
Hari-hari ketika seseorang dapat melihat (atau bahkan menghafal) waktu siklus untuk setiap instruksi dan tahu berapa banyak jam yang dibutuhkan untuk menyelesaikan sedikit kode tertentu sudah lama berlalu untuk chip kelas atas (tetapi masih bersama kami di beberapa pengontrol mikro). Inti CPU modern yang bertujuan umum dapat memiliki banyak salinan dari beberapa unit eksekusi yang berbeda di beberapa saluran pipa, mengakses cache memori multi-tahap dengan logikanya sendiri, ditambah prediksi cabang dan kemampuan eksekusi spekulatif. Memiliki beberapa inti pada satu die menyeret logika konsistensi cache, dan kompleksitas lainnya.
Jadi jawaban singkatnya adalah: lebih banyak core berarti lebih banyak kapasitas untuk menyelesaikan sesuatu, tetapi tidak dengan cara yang baik dan dapat diprediksi .
sumber
Ludwig menjelaskan perbedaan antara CISC dan RISC, tetapi lupa menyebutkan bahwa sementara instruksi RISC sederhana dan cepat, mereka melakukan sedikit secara individu sehingga Anda harus merangkai beberapa orang untuk melakukan hal yang sama seperti instruksi tunggal dalam prosesor CISC. Akibatnya, beberapa instruksi RISC akan lebih cepat, yang lainnya tidak.
sumber
Siklus lebih merupakan konsep per inti. Setiap inti memiliki siklus sendiri secara paralel.
sumber