Mengapa prosesor membutuhkan cache dan apa perbedaan antara level L1, L2, L3





Semua unit pemrosesan pusat dari komputer mana pun, baik itu laptop murah atau server seharga jutaan dolar, memiliki perangkat yang disebut cache. Dan dengan probabilitas yang sangat tinggi memiliki beberapa level.



Ini mungkin penting, jika tidak, mengapa harus menginstalnya? Tetapi apa yang dilakukan cache, dan mengapa cache memiliki level yang berbeda? Dan apa artinya "12-way set asosiatif"?





Apa itu cache?



TL; DR: Ini adalah memori kecil tapi sangat cepat yang terletak di dekat blok logis CPU.



Namun, tentu saja kita dapat mempelajari lebih banyak tentang cache ...



Mari kita mulai dengan sistem penyimpanan ajaib imajiner: sistem ini sangat cepat, dapat menangani transfer data dalam jumlah tak terbatas pada saat yang sama, dan selalu menyediakan penyimpanan yang andal dan aman. Tentu saja, tidak ada yang seperti itu, tetapi jika memang demikian, struktur prosesor akan jauh lebih sederhana.



Prosesor kemudian hanya membutuhkan blok logika untuk penjumlahan, perkalian, dll., Serta sistem kontrol transmisi data, karena sistem penyimpanan teoretis kami mampu mengirimkan dan menerima semua angka yang diperlukan secara instan; tidak ada blok logika yang harus berdiri diam sambil menunggu data ditransfer.



Tapi, seperti yang kita ketahui, tidak ada teknologi penyimpanan ajaib seperti itu. Alih-alih, kami memiliki hard drive atau solid state drive, dan bahkan yang terbaik pun tidak mampu memenuhi kemampuan pemrosesan yang diperlukan untuk prosesor modern.





Penyimpanan T'Fon yang Hebat



Alasannya adalah karena prosesor modern sangat cepat - mereka hanya memerlukan satu siklus clock untuk menambahkan dua integer 64-bit; jika prosesor berjalan pada 4 GHz, ini hanya 0,0000000025 detik, atau seperempat nanodetik.



Pada saat yang sama, hard disk yang berputar membutuhkan ribuan nanodetik hanya untuk menemukan data pada disk, belum lagi mentransfernya, dan solid-state drive membutuhkan waktu puluhan atau ratusan nanodetik.



Jelas, drive seperti itu tidak dapat dibangun di dalamprosesor, jadi akan ada pemisahan fisik di antara mereka. Oleh karena itu, waktu juga ditambahkan untuk memindahkan data, yang memperburuk situasi.





Sayangnya, ini adalah A'Tuin hebat dari penyimpanan data.



Itulah sebabnya kami membutuhkan sistem penyimpanan lain yang terletak di antara prosesor dan drive utama. Ini harus lebih cepat daripada perangkat penyimpanan, mampu menangani beberapa transfer data secara bersamaan, dan lebih dekat ke prosesor.



Nah, kita sudah memiliki sistem seperti itu, dan ini disebut RAM ; itu ada di setiap komputer dan melakukan tugas ini dengan tepat.



Hampir semua penyimpanan tersebut berjenis DRAM (dynamic random access memory) ; mereka mampu mentransfer data jauh lebih cepat daripada perangkat penyimpanan manapun.





Namun, terlepas dari kecepatannya yang luar biasa, DRAM tidak mampu menyimpan data sebanyak itu.



Beberapa chip memori DDR4 terbesar yang dikembangkan oleh Micron menyimpan 32 Gb, atau 4 GB data; hard drive terbesar menyimpan 4.000 kali lebih banyak.



Jadi, meskipun kami telah meningkatkan kecepatan jaringan data kami, kami memerlukan sistem tambahan (perangkat keras dan perangkat lunak) untuk mengetahui data apa yang harus disimpan dalam jumlah terbatas DRAM, siap untuk diproses oleh prosesor.



DRAM dapat diproduksi dalam paket chip (ini disebut DRAM tertanam). Namun, prosesornya cukup kecil, sehingga tidak dapat memuat banyak memori.





DRAM 10MB di sebelah kiri GPU Xbox 360. Sumber: CPU Grave Yard



Sebagian besar DRAM terletak di dekat prosesor, terhubung ke motherboard, dan selalu merupakan komponen yang paling dekat dengan prosesor. Namun memori ini masih belum cukup cepat…



DRAM membutuhkan sekitar 100 nanodetik untuk mencari data, namun setidaknya mampu mentransfer milyaran bit per detik. Sepertinya kita membutuhkan tahap memori lain yang dapat ditempatkan di antara blok CPU dan DRAM.



Tahap yang tersisa muncul di tempat kejadian: SRAM ( memori akses acak statis). DRAM menggunakan kapasitor mikroskopis untuk menyimpan data dalam bentuk muatan listrik, sedangkan SRAM menggunakan transistor untuk tugas yang sama, yang beroperasi pada kecepatan yang sama dengan blok logika prosesor (sekitar 10 kali lebih cepat dari DRAM).





Tentu saja, SRAM memiliki kekurangan, dan lagi-lagi berkaitan dengan ruang.



Memori transistor membutuhkan lebih banyak ruang daripada DRAM: dalam ukuran yang sama dengan chip DDR4 4GB, Anda bisa mendapatkan SRAM kurang dari 100MB. Tetapi karena itu diproduksi menggunakan proses manufaktur yang sama dengan CPU, SRAM dapat disematkan langsung di dalam prosesor, sedekat mungkin dengan blok logika.



Dengan setiap langkah tambahan, kami meningkatkan kecepatan data yang ditransfer dengan mengorbankan volume yang disimpan. Kita dapat melanjutkan dan menambahkan langkah baru, yang akan lebih cepat, tetapi lebih kecil.



Jadi kami mendapatkan definisi yang lebih ketatkonsep cache: kumpulan SRAM yang terletak di dalam prosesor; mereka memaksimalkan pemanfaatan prosesor dengan mentransfer dan menyimpan data pada kecepatan yang sangat tinggi. Apakah Anda puas dengan definisi ini? Hebat, karena segalanya akan menjadi jauh lebih rumit mulai sekarang!



Kontan: parkir bertingkat



Seperti yang kami katakan di atas, cache diperlukan karena kami tidak memiliki sistem penyimpanan ajaib yang dapat menangani konsumsi data dari blok logika prosesor. CPU dan GPU modern berisi banyak SRAM, diatur dalam hierarki di dalam - urutan cache dengan struktur berikut:





Pada gambar di atas, prosesor (CPU) ditunjukkan dengan persegi panjang bertitik. Di sebelah kiri adalah ALU (unit logika aritmatika); ini adalah struktur yang melakukan operasi matematika. Meskipun bukan hanya cache, level memori yang paling dekat dengan ALU adalah register (mereka diurutkan dalam file register ).



Masing-masing menyimpan satu angka, misalnya, 64-bit integer; nilai itu sendiri dapat berupa elemen dari beberapa data, kode instruksi tertentu, atau alamat memori dari beberapa data lainnya.



File register di prosesor desktop cukup kecil, misalnya, di setiap core Intel Core i9-9900Kada dua bank dari file tersebut, dan satu bank untuk bilangan bulat hanya berisi 180 bilangan bulat 64-bit. File register lain untuk vektor (deretan kecil angka) berisi 168 elemen 256-bit. Artinya, total file register untuk setiap core sedikit kurang dari 7 KB. Sebagai perbandingan, file register Nvidia GeForce RTX 2080 Ti untuk streaming multiprosesor (sebagaimana GPU memanggil analog inti CPU) berukuran 256 KB.



Register, seperti cache, adalah SRAM, tetapi kecepatannya tidak melebihi kecepatan ALU yang mereka layani; mereka mentransfer data dalam satu siklus clock. Tetapi mereka tidak dirancang untuk menyimpan data dalam jumlah besar (hanya satu elemen), jadi selalu ada blok memori yang lebih besar di sebelahnya: ini adalah cache tingkat pertama (Level 1).





Satu inti prosesor Intel Skylake. Sumber: Wikichip



Gambar di atas adalah tampilan yang diperbesar dari salah satu inti prosesor desktop Intel Skylake .



File ALU dan register terletak di sebelah kiri dan dikelilingi oleh bingkai hijau. Di bagian atas foto, cache Data Tingkat 1 ditunjukkan dengan warna putih. Itu tidak berisi banyak informasi, hanya 32 KB, tetapi seperti register, itu terletak sangat dekat dengan blok logis dan beroperasi pada kecepatan yang sama dengannya.



Persegi panjang putih lainnya di sebelah kanan menunjukkan cache Instruksi Level 1, juga berukuran 32 KB. Sesuai dengan namanya, ini menyimpan berbagai perintah yang siap untuk dipecah menjadi operasi mikro yang lebih kecil .(biasanya dilambangkan dengan μops) bahwa ALU harus dijalankan. Ada juga cache untuk mereka, yang dapat diklasifikasikan sebagai Level 0, karena lebih kecil (hanya berisi 1.500 operasi) dan lebih dekat dari cache L1.



Anda mungkin bertanya-tanya mengapa SRAM ini sangat kecil? Mengapa ukurannya tidak megabyte? Bersama-sama, cache data dan instruksi menempati area yang hampir sama pada chip sebagai blok logika utama, sehingga meningkatkannya akan menyebabkan peningkatan area total die.



Tetapi alasan utama ukuran beberapa kilobyte mereka adalah karena kapasitas memori meningkat, waktu yang dibutuhkan untuk mencari dan mengambil data meningkat. Cache L1 harus sangat cepat, jadi ada pertukaran antara ukuran dan kecepatan - paling banter, dibutuhkan sekitar 5 siklus jam untuk mendapatkan data dari cache ini (lebih untuk nilai floating point).





L2 cache Skylake: 256KB SRAM



Tetapi jika ini adalah satu-satunya cache di dalam prosesor, kinerjanya akan mengalami rintangan yang tidak terduga. Itulah sebabnya mengapa lapisan memori lain dibangun ke dalam kernel: cache Level 2. Ini adalah blok penyimpanan umum yang berisi instruksi dan data.



Itu selalu lebih besar dari Level 1: di prosesor AMD Zen 2 , dibutuhkan hingga 512KB untuk menyediakan data yang cukup untuk cache level yang lebih rendah. Namun, ukurannya yang besar membutuhkan pengorbanan - dibutuhkan sekitar dua kali lebih lama untuk menemukan dan mentransfer data dari cache ini dibandingkan dengan Level 1.



Pada masa Intel Pentium pertama, cache Level 2 adalah chip terpisah, baik dipasang pada papan kecil yang terpisah (seperti RAM DIMM), atau dibangun di motherboard utama. Secara bertahap, itu pindah ke kasing prosesor itu sendiri, dan, akhirnya, itu sepenuhnya terintegrasi ke dalam kristal chip; ini terjadi di era prosesor seperti Pentium III dan AMD K6-III.



Pencapaian ini segera diikuti oleh level cache lain yang diperlukan untuk mendukung level yang lebih rendah, dan itu tiba tepat pada waktunya untuk masa kejayaan chip multi-core.





Chip Intel Kaby Lake. Sumber: Wikichip



Gambar chip Intel Kaby Lake ini menunjukkan empat inti di sebelah kiri (GPU terintegrasi memakan hampir setengah cetakan dan di sebelah kanan). Setiap inti memiliki kumpulan cache Level 1 dan 2 "pribadi" sendiri (disorot dalam kotak putih dan kuning), tetapi mereka juga memiliki kumpulan blok SRAM ketiga.



Cache level ketiga (Level 3), meskipun terletak tepat di sebelah satu inti, benar-benar umum untuk semua yang lain - setiap inti dapat dengan bebas mengakses konten cache L3 dari inti lain. Ini jauh lebih besar (2 hingga 32 MB), tetapi juga jauh lebih lambat, dengan rata-rata lebih dari 30 siklus, terutama ketika kernel perlu menggunakan data yang berada di blok cache yang jauh.



Di bawah ini adalah salah satu inti arsitektur AMD Zen 2: cache data dan instruksi 32KB Level 1 (dalam kotak putih), cache Level 2 512KB (dalam kotak kuning), dan blok cache L3 4MB yang besar (dalam kotak merah).





Memperbesar satu inti prosesor AMD Zen 2. Sumber: Fritzchens Fritz



Tapi tunggu dulu: bagaimana 32KB bisa memakan lebih banyak ruang fisik daripada 512KB? Jika Level 1 menyimpan begitu sedikit data, mengapa itu sangat besar dibandingkan dengan cache L2 dan L3?



Bukan hanya angka



Cache meningkatkan kinerja dengan mempercepat transfer data ke blok logika dan menyimpan salinan instruksi dan data yang sering digunakan di sekitar. Informasi yang disimpan dalam cache dibagi menjadi dua bagian: data itu sendiri dan tempat asalnya terletak di memori / penyimpanan sistem - alamat ini disebut tag cache .



Ketika prosesor melakukan operasi yang perlu membaca atau menulis data dari / ke memori, itu dimulai dengan memeriksa tag di cache Level 1. Jika data yang diperlukan ada di sana (terjadi cache hit ), maka data ini hampir Sekaligus. Cache miss terjadi jika tag yang diperlukan tidak ditemukan di level terendah dalam cache.



Tag baru dibuat di cache L1, dan arsitektur prosesor lainnya mengambil alih, mencari di level cache lain (hingga penyimpanan utama, jika perlu) untuk data untuk tag itu. Tetapi untuk mengosongkan ruang di cache L1 untuk tag baru ini, sesuatu harus dilemparkan ke L2.



Ini menghasilkan pengacakan data yang hampir konstan, dilakukan hanya dalam beberapa siklus jam. Satu-satunya cara untuk mencapai ini adalah dengan membuat struktur kompleks di sekitar SRAM untuk menangani manajemen data. Dengan kata lain, jika inti prosesor hanya terdiri dari satu ALU, maka cache L1 akan jauh lebih sederhana, tetapi karena ada lusinan (dan banyak dari mereka yang menyulap dengan dua aliran instruksi), cache memerlukan banyak koneksi untuk memindahkan data.





Anda dapat menggunakan perangkat lunak gratis seperti CPU-Z untuk memeriksa informasi cache di prosesor komputer Anda . Tapi apa arti semua informasi ini? Elemen penting adalah set label asosiatif , yang menunjukkan aturan yang digunakan untuk menyalin blok data dari memori sistem ke cache.



Informasi cache di atas adalah untuk Intel Core i7-9700K . Setiap cache Level 1-nya dibagi menjadi 64 blok kecil, yang disebut set , dan masing-masing blok ini juga dipecah menjadi baris cache.(Ukuran 64 byte). "Set asosiatif" berarti bahwa satu blok data dari sistem terikat ke baris cache dalam satu set tertentu, dan tidak dapat dengan bebas terikat ke tempat lain.



"8-way" berarti bahwa satu blok dapat dikaitkan dengan 8 baris cache di set. Semakin tinggi tingkat keterkaitan (yaitu, semakin besar "cara"), semakin besar kemungkinan cache ditemukan selama pencarian prosesor dan semakin sedikit kerugian yang disebabkan oleh cache yang hilang. Kerugian dari sistem seperti itu adalah peningkatan kompleksitas dan konsumsi daya, serta kinerja yang lebih rendah, karena lebih banyak baris cache harus diproses untuk setiap blok data.





Termasuk cache L1 + L2, cache korban L3, kebijakan write-back, bahkan ada ECC. Sumber: Fritzchens Fritz



Aspek lain dari kompleksitas cache berkaitan dengan bagaimana data disimpan di antara tingkatan yang berbeda. Aturan diatur dalam kebijakan penyertaan . Misalnya, prosesor Intel Core memiliki cache L1 + L3 yang sepenuhnya inklusif . Ini berarti bahwa beberapa data di Level 1, misalnya, mungkin ada di Level 3. Ini mungkin tampak seperti membuang-buang ruang cache yang berharga, tetapi keuntungannya adalah jika prosesor melewatkan tag di level yang lebih rendah, itu tidak perlu cari data tingkat atas.



Dalam prosesor yang sama, cache L2 tidak inklusif: semua data yang disimpan di sana tidak disalin ke lapisan lain. Ini menghemat ruang, tetapi menyebabkan sistem memori chip mencari tag yang hilang di L3 (yang selalu jauh lebih besar). Cache korban memiliki prinsip serupa, tetapi digunakan untuk menyimpan informasi yang dibawa dari tingkat yang lebih rendah. Misalnya, prosesor AMD Zen 2 menggunakan cache korban L3, yang hanya menyimpan data dari L2.



Ada kebijakan cache lainnya, seperti menulis data ke cache dan memori sistem utama. Ini disebut kebijakan tulis ; kebanyakan prosesor modern menggunakan cache tulis-balik- ini berarti bahwa ketika data ditulis ke lapisan cache, ada penundaan sebelum menulis salinannya ke memori sistem. Paling sering, jeda ini berlangsung selama data tetap berada di cache - RAM menerima informasi ini hanya jika "muncul" dari cache.





GPU Nvidia GA100 dengan cache 20 MB L1 dan cache L2 40 MB



Untuk desainer prosesor, pilihan ukuran cache , jenis, dan kebijakan adalah masalah menyeimbangkan drive untuk meningkatkan daya prosesor dengan meningkatnya kompleksitas dan ruang chip. Jika memungkinkan untuk membuat cache asosiatif Level 1 1000 saluran 20MB sedemikian rupa sehingga mereka tidak menempati area Manhattan (dan tidak mengkonsumsi jumlah daya yang sama), maka kita semua akan memiliki komputer dengan chip seperti itu!



Tingkat cache terendah dalam prosesor modern tetap hampir tidak berubah selama dekade terakhir. Namun, cache Level 3 terus bertambah besar. Jika Anda memiliki $ 999 untuk Intel i7-980X sepuluh tahun yang lalu, Anda dapat memiliki cache 12MB. Hari ini untuk setengah dari jumlah itutersedia untuk pembelian 64 MB .



Untuk meringkas, cache adalah perangkat yang sangat penting dan mengagumkan. Kami belum membahas jenis cache lain di CPU dan GPU (misalnya, buffer terjemahan asosiatif atau cache tekstur), tetapi karena semuanya memiliki struktur dan tata letak level sederhana yang sama, tidak akan sulit untuk memahaminya.



Pernahkah Anda memiliki komputer dengan cache L2 di motherboard? Bagaimana dengan papan putri Pentium II dan Celeron (misalnya 300a ) berlubang ? Ingat prosesor L3 bersama pertama Anda?






Periklanan



Perusahaan kami menawarkan untuk menyewa server dengan prosesor dari Intel dan AMD. Dalam kasus terakhir, ini adalah server epik! VDS dengan AMD EPYC , frekuensi inti CPU hingga 3,4 GHz. Konfigurasi maksimum adalah 128 core CPU, RAM 512 GB, NVMe 4000 GB.






All Articles