Apa itu "Instruksi per Siklus"?


23

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.


Tidak, bukan itu masalahnya. CPU x86 modern dapat mempertahankan tiga instruksi per core per siklus dalam kondisi ideal sementara beberapa instruksi memerlukan puluhan siklus.
David Schwartz

Jawaban:


22

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.


9
Bagi saya, analogi "jalur perakitan" menunjukkan perpipaan sederhana, bukan arsitektur superscalar. Superscalar melibatkan mereplikasi bagian-bagian perangkat keras CPU (misalnya, tahap pipa yang merupakan hambatan) untuk meningkatkan throughput.
sblair

2
Saya menambahkan untuk singkatnya: RISC = set instruksi yang dikurangi; CISC = set instruksi kompleks. Penjelasan yang bagus, Ludwig untuk menunjukkan rasio hit / miss cache dan (akhirnya) menunjukkan TLB. Menjelaskan arsitektur mikroprosesor tidak mudah, terutama untuk menjejalkan semuanya menjadi satu (cukup kompak) pos! :)
osij2is

1
Dari apa yang saya dengar, CPU hari ini menghabiskan banyak waktu mereka menunggu pekerjaan untuk muncul dari memori utama. Setidaknya itulah respons yang saya dapatkan ketika saya bertanya mengapa tidak ada lagi core eksekusi dalam CPU.
surfasb

32

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 ...


Analogi yang bagus. Aku akan mencurinya.
dmckee

6
Dan hyperthreading seperti membuat beberapa orang mencuci di binatu yang sama.
Ronald Pottol

1
Prediksi Cabang: Anda mulai mencuci pakaian yang Anda pikir akan Anda butuhkan di minggu depan
Akash

2
Hyperthreading: Anda mulai menerima binatu orang lain, dan mengiklankan jumlah mesin cuci yang Anda miliki (1). Segera, Anda menyadari bahwa mesin cuci Anda memiliki ruang untuk lebih dari sepasang celana yang sedang Anda cuci, tidak hanya sepasang celana lain, tetapi sesuatu yang lebih kecil. Jadi, Anda memasukkan beberapa kaus kaki juga. Sekarang Anda mengiklankan 2 mesin cuci, dan berharap orang-orang akan memberikan layanan binatu yang cukup beragam bagi Anda untuk selalu "mengisi lubang" dengan barang-barang yang lebih kecil. Tepat ketika orang ini yang pernah datang dengan 10 jins kotor dan 1 kaus kaki menjatuhkan barang-barangnya, itu sangat lambat.
Florenz Kley

@Akash Anda mencuci pakaian yang bahkan belum memiliki noda, untuk berjaga-jaga?
Kevin Panko

3

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 .


2

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 .


1

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.


0

Siklus lebih merupakan konsep per inti. Setiap inti memiliki siklus sendiri secara paralel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.