Apakah satu-satunya tujuan transistor dalam CPU untuk bertindak sebagai sakelar yang menentukan set instruksinya? Dan jika demikian, mengapa menambah jumlah transistor meningkatkan kecepatannya?
Apakah satu-satunya tujuan transistor dalam CPU untuk bertindak sebagai sakelar yang menentukan set instruksinya? Dan jika demikian, mengapa menambah jumlah transistor meningkatkan kecepatannya?
Jawaban:
Dari atas kepala saya:
Lebih banyak cache , yang lebih cepat dari RAM
Lebih banyak instruksi SIMD , yang memproses lebih cepat daripada instruksi data tunggal
Lebih banyak inti , sehingga Anda bisa melakukan dua atau lebih hal sekaligus
Unit lebih fungsional, seperti built-in FPU s, dan beberapa ALU s
Jalur pipa , sehingga setiap inti dapat melakukan lebih banyak hal sekaligus
Logika pemrosesan yang lebih baik, seperti logika prediksi cabang yang lebih canggih
Jika Anda ingin tahu tentang hal semacam ini saya sangat merekomendasikan buku The Elements of Computing oleh Noam Nisan dan Shimon Schocken (setidaknya paruh pertama). Setelah melalui itu Anda akan dapat menjawab pertanyaan Anda sendiri dengan sangat rinci dengan apresiasi penuh dari bagian-bagian yang terlibat.
Situs web pendamping sebenarnya memiliki beberapa bab dan catatan sampel. Ini buku yang sangat mudah didekati. Saya menjalaninya sendiri tanpa masalah dan kemudian mengambil kelas baru di universitas saya yang menggunakannya sebagai teks utamanya.
Jawaban sederhana adalah bahwa lebih banyak transistor tidak membuat sisanya berjalan lebih cepat , tetapi alih-alih melakukan satu hal per periode waktu, kita sekarang dapat melakukan dua (dengan beberapa batasan).
Ken sudah merangkum beberapa alasan dalam jawabannya . Untuk memperluas itu lebih jauh
- Lebih banyak cache , yang lebih cepat dari RAM
Jelas cache yang lebih besar membutuhkan lebih banyak transistor. Tetapi dengan lebih banyak transistor, kami juga memiliki pilihan untuk menggunakan cache yang lebih cepat . Cache CPU hanya SRAM yang biasanya terbuat dari 6 transistor (AKA 6T SRAM). Namun ketika ada cukup transistor, mungkin layak menggunakan sel SRAM yang lebih cepat tetapi lebih besar yang terbuat dari lebih dari 6 transistor (seperti 8T, 10T SRAM)
- Lebih banyak instruksi SIMD , yang memproses lebih cepat daripada instruksi data tunggal
Bukan hanya SIMD tetapi semua jenis instruksi percepatan. Misalnya arsitektur modern sering memiliki unit AES untuk enkripsi / dekripsi yang lebih cepat, FMA untuk perhitungan matematika yang lebih baik (terutama pemrosesan sinyal digital), atau virtualisasi untuk mesin virtual yang lebih cepat. Mendukung lebih banyak instruksi berarti lebih banyak sumber daya diperlukan untuk memecahkan kode dan menjalankannya
- Lebih banyak inti , sehingga Anda bisa melakukan dua atau lebih hal sekaligus
- Jalur pipa , sehingga setiap inti dapat melakukan lebih banyak hal sekaligus
Ini cukup jelas
Di masa lalu tidak ada daerah mati yang cukup untuk FPU sehingga orang harus membeli yang terpisah jika mereka memiliki persyaratan aritmatika titik-mengambang yang tinggi. Dengan transistor yang jauh lebih banyak, FPU built-in memungkinkan, mempercepat matematika floating-point
Selain itu, CPU modern adalah superscalar dan akan mencoba melakukan banyak hal sekaligus dengan menemukan potongan data independen dan menghitungnya lebih awal, meskipun aliran instruksi adalah linier dan serial. Semakin banyak hal yang dapat mereka lakukan secara paralel semakin cepat. Untuk melakukan itu CPU dapat memiliki beberapa ALU dan ALU dapat memiliki beberapa unit eksekusi. Jika misalnya CPU memiliki 5 adders dibandingkan dengan 4 pada generasi sebelumnya maka itu sudah berjalan 25% lebih cepat dalam situasi paling optimis tanpa perubahan jam. CPU yang lebih canggih bahkan menggunakan eksekusi out-of-order (yang merupakan kasus untuk kebanyakan CPU berkinerja tinggi modern)
- Logika pemrosesan yang lebih baik, seperti logika prediksi cabang yang lebih canggih
Operasi biasanya dapat dilakukan dengan berbagai cara. Jika Anda memiliki lebih banyak transistor, Anda akan memiliki lebih banyak sumber daya untuk menggunakan teknik yang lebih cepat. Beberapa contoh sederhana:
Pergeseran bit:
Sebuah shifter sederhana dibuat dengan serial menghubungkan sandal jepit bersama-sama.
Itu hanya membutuhkan satu flip-flop per bit, karenanya sangat kompak. Tetapi perlu satu jam untuk menggeser ke kiri atau ke kanan sedikit. Itu sebabnya mikrokontroler dan CPU tertanam kecil hanya memiliki instruksi untuk beralih satu. Lihat
Ketika Anda memiliki lebih banyak transistor untuk dibelanjakan, Anda dapat mengubah ke shifter barel . Sekarang sebuah CPU dapat menggeser bit dalam satu jam tunggal dengan biaya ratusan atau ribuan transistor
Tambahan:
Hal yang sama berlaku untuk unit lain seperti pengganda, pembagi, penjadwal ... Misalnya kita dapat melakukan perkalian sangat cepat dalam satu jam menggunakan logika kombinasional . Anda dapat melihat beberapa contoh sederhana dalam pertanyaan pengganda 3-bit - bagaimana cara kerjanya? . Tetapi transistor yang dibutuhkan akan tumbuh hingga kuadrat lebar input, oleh karena itu CPU kecil dengan pengali menggunakan logika sekuensial sebagai gantinya untuk menghemat banyak ruang untuk pengali:
Arsitektur multiplier yang lebih tua menggunakan shifter dan akumulator untuk menjumlahkan setiap produk parsial, seringkali satu produk parsial per siklus, menukar kecepatan untuk area die. Arsitektur multiplier modern menggunakan algoritma Baugh-Wooley (Modified), Wallace tree, atau pengganda Dadda untuk menambahkan produk parsial bersamaan dalam satu siklus tunggal. Kinerja implementasi pohon Wallace kadang-kadang ditingkatkan dengan Booth yang dimodifikasi yang menyandikan salah satu dari dua multiplisand, yang mengurangi jumlah produk parsial yang harus dijumlahkan
https://en.wikipedia.org/wiki/Binary_multiplier#Implementations
Setelah Anda memiliki kumpulan transistor yang sangat besar, Anda bahkan dapat menggunakan logika kombinasional untuk melakukan FMA yang jauh lebih banyak sumber daya daripada pengganda
Komputer modern dapat berisi MAC khusus, terdiri dari pengali yang diimplementasikan dalam logika kombinasional diikuti oleh penambah dan register akumulator yang menyimpan hasilnya. Output dari register diumpankan kembali ke satu input dari adder, sehingga pada setiap siklus clock, output dari pengali ditambahkan ke register. Pengganda kombinasional membutuhkan sejumlah besar logika, tetapi dapat menghitung suatu produk jauh lebih cepat daripada metode pemindahan dan penambahan tipikal komputer sebelumnya.