tl; dr
Pipa yang lebih pendek berarti kecepatan clock yang lebih cepat, tetapi dapat mengurangi throughput. Juga, lihat jawaban # 2 dan 3 di bagian bawah (mereka pendek, saya janji).
Versi lebih panjang:
Ada beberapa hal yang perlu dipertimbangkan di sini:
- Tidak semua instruksi memakan waktu yang sama
- Tidak semua instruksi bergantung pada apa yang dilakukan segera (atau bahkan sepuluh atau dua puluh) instruksi kembali
Saluran pipa yang sangat disederhanakan (apa yang terjadi pada chip Intel modern sangat kompleks) memiliki beberapa tahap:
Fetch -> Decode -> Memory Access -> Execute -> Writeback -> Pembaruan program counter
Di setiap -> ada biaya waktu yang dikeluarkan. Selain itu, setiap centang (siklus jam), semuanya bergerak dari satu tahap ke tahap berikutnya, sehingga tahap paling lambat Anda menjadi kecepatan untuk SEMUA tahap (ini benar-benar membayar mereka untuk memiliki panjang yang sama).
Katakanlah Anda memiliki 5 instruksi, dan Anda ingin menjalankannya (gambar diambil dari wikipedia, di sini pembaruan PC belum selesai). Akan terlihat seperti ini:
Meskipun setiap instruksi membutuhkan 5 siklus clock untuk menyelesaikan, instruksi yang selesai keluar dari pipa setiap siklus. Jika waktu yang dibutuhkan untuk masing-masing tahap adalah 40 ns, dan 15 ns untuk bit-bit antara (menggunakan enam tahap pipeline saya di atas), akan membutuhkan 40 * 6 + 5 * 15 = 315 ns untuk mengeluarkan instruksi pertama.
Sebaliknya, jika saya benar-benar menghilangkan pipa (tetapi menjaga semuanya tetap sama), hanya perlu 240 ns untuk mengeluarkan instruksi pertama. (Perbedaan kecepatan untuk mengeluarkan instruksi "pertama" ini disebut latensi. Secara umum kurang penting dibandingkan dengan throughput, yang merupakan jumlah instruksi per detik).
Namun perbedaan sebenarnya adalah bahwa dalam contoh pipelined, saya mendapatkan instruksi baru (setelah yang pertama) setiap 60 ns. Dalam yang non-pipa, dibutuhkan 240 setiap kali. Ini menunjukkan bahwa jaringan pipa bagus dalam meningkatkan throughput.
Mengambil langkah lebih jauh, akan terlihat bahwa pada tahap akses memori, saya akan memerlukan unit tambahan (untuk melakukan perhitungan alamat). Itu berarti bahwa jika ada instruksi yang tidak menggunakan tahap mem siklus itu, maka saya bisa melakukan penambahan lain. Jadi saya dapat melakukan dua tahap eksekusi (dengan satu berada di tahap akses memori) pada satu prosesor dalam satu centang (penjadwalan adalah mimpi buruk, tapi jangan pergi ke sana. Selain itu, tahap pembaruan PC juga akan membutuhkan unit tambahan di kasus lompatan, jadi saya bisa melakukan tiga tambahan mengeksekusi negara dalam satu centang). Dengan memiliki saluran pipa, dapat dirancang sedemikian rupa sehingga dua (atau lebih) instruksi dapat menggunakan tahapan yang berbeda (atau tahapan leapfog, dll), menghemat waktu yang berharga.
Perhatikan bahwa untuk melakukan ini, prosesor melakukan banyak "sihir" ( eksekusi di luar urutan , prediksi cabang , dan banyak lagi), tetapi ini memungkinkan banyak instruksi keluar lebih cepat daripada tanpa pipa (perhatikan bahwa pipa yang terlalu lama sangat sulit untuk dikelola, dan menimbulkan biaya yang lebih tinggi hanya dengan menunggu antar tahap). Sisi sebaliknya adalah bahwa jika Anda membuat pipa terlalu lama, Anda bisa mendapatkan kecepatan jam gila, tetapi kehilangan banyak manfaat asli (memiliki jenis logika yang sama yang dapat ada di banyak tempat, dan digunakan pada waktu yang sama ).
Jawaban # 2:
Prosesor SIMD (satu instruksi beberapa data) (seperti kebanyakan GPU) melakukan banyak pekerjaan pada banyak bit informasi, tetapi membutuhkan lebih lama untuk melakukannya. Membaca semua nilai membutuhkan waktu lebih lama (berarti jam lebih lambat, meskipun ini diimbangi dengan memiliki bus yang jauh lebih luas sampai batas tertentu) tetapi Anda bisa mendapatkan lebih banyak instruksi dilakukan sekaligus (instruksi lebih efektif per siklus).
Jawaban # 3:
Karena Anda dapat "menipu" secara artifisial memperpanjang jumlah siklus sehingga Anda dapat melakukan dua instruksi setiap siklus (cukup membagi dua kecepatan clock). Dimungkinkan juga untuk hanya melakukan sesuatu setiap dua kutu sebagai lawan satu (memberikan kecepatan 2x jam, tetapi tidak mengubah instruksi satu detik).