Setiap CPU yang ditemukan di komputer mana pun, dari laptop murah hingga server jutaan dolar, akan memiliki sesuatu yang disebut cache. Dan juga, cache tersebut akan memiliki beberapa level atau tingkatan.
Lalu, apa itu cache? apa saja kegunaan cache? Lalu kenapa cache terbagi ke dalam beberapa jenis tingkatan?
Apa itu cache?
Kasarnya, cache adalah memori yang kapasitasnya kecil, tetapi sangat cepat, yang lokasinya berada di samping unit logika dari prosesor/CPU.
Bayangkan suatu sistem penyimpanan dan transfer data ajaib yang sangat cepat, dapat menangani transaksi data dalam jumlah tak terbatas sekaligus, dan selalu menjaga data tetap aman dan terlindungi. Suatu prosesor atau CPU hanya perlu memiliki unit logika untuk menambah, mengalikan, dll., dan suatu sistem untuk menangani transfer data.
Sistem yang menangani transfer data itu dapat langsung mengirim dan menerima semua data yang diperlukan; tanpa adanya unit logika yang akan ditahan menunggu transaksi data. selesai
Tapi, seperti yang kita semua tahu, tidak ada teknologi penyimpanan ajaib. Sebaliknya, dalam dunia nyata, kita memiliki hardisk atau solid state drive untuk penyimpanan data, dan bahkan yang terbaik pun tidak mampu menangani semua transfer data yang diperlukan untuk CPU pada umumnya.
Alasan mengapa CPU modern sangat cepat, itu karena mereka hanya membutuhkan satu siklus clock untuk menambahkan dua nilai integer 64 bit bersama-sama, dan bahkan untuk CPU yang berjalan pada 4 GHz, proses ini hanya akan berlangsung selamai 0,0000000025 detik atau seperempat nanodetik.
Sementara itu, hard drive yang berputar membutuhkan ribuan nanodetik hanya untuk menemukan data pada cakram di dalamnya, apalagi mentransfernya, dan solid state drive masih memerlukan puluhan atau ratusan nanodetik.
Drive semacam itu jelas tidak dapat dibangun ke dalam prosesor, jadi itu berarti akan ada pemisahan fisik antara keduanya. Kalaupun dilakukan, itu hanya akan menambah lebih banyak waktu untuk pemindahan data, dan malah memperburuk keadaan.
Jadi yang kita butuhkan adalah sistem penyimpanan data lain, yang berada di antara prosesor dan penyimpanan utama. Ini harus lebih cepat dari drive, mampu menangani banyak transfer data secara bersamaan, dan lebih dekat ke prosesor.
Nah, kita sudah memiliki hal seperti itu, dan itu disebut RAM, dan setiap sistem komputer memiliki beberapa untuk tujuan ini.
Hampir semua jenis penyimpanan ini adalah DRAM (Dynamic Random Access Memory) dan mampu mengirimkan data lebih cepat daripada drive mana pun.
Namun, meskipun DRAM sangat cepat, DRAM tidak dapat menyimpan data dalam jumlah besar.
Beberapa chip memori DDR4 terbesar yang dibuat oleh Micron, salah satu dari sedikit produsen DRAM, menampung 32 Gbits atau 4 GB data; hard drive terbesar menampung 4.000 kali lebih banyak dari ini.
Jadi, meskipun kita telah meningkatkan kecepatan jaringan data kami, sistem tambahan – perangkat keras dan perangkat lunak – akan diperlukan untuk menentukan data apa yang harus disimpan dalam jumlah terbatas DRAM, siap untuk CPU.
Setidaknya DRAM dapat diproduksi dalam paket chip (dikenal sebagai DRAM tertanam). CPU cukup kecil, jadi Anda tidak bisa terlalu banyak menggunakannya.ys the closest component to the CPU, in a computer system. And yet, it’s still not fast enough…
DRAM masih membutuhkan waktu sekitar 100 nanodetik untuk menemukan data, namun setidaknya dapat mentransfer milyaran bit setiap detik. Sepertinya kita membutuhkan tahap memori lain, untuk masuk di antara unit prosesor dan DRAM.
Masuklah SRAM (Static RAM). Apabila DRAM menggunakan kapasitor mikroskopis untuk menyimpan data dalam bentuk muatan listrik, SRAM menggunakan transistor untuk melakukan hal yang sama dan ini dapat bekerja hampir secepat unit logika dalam prosesor (kira-kira 10 kali lebih cepat dari DRAM).
Ada, tentu saja, kelemahan SRAM dan sekali lagi, ini tentang ruang.
Memori berbasis transistor membutuhkan lebih banyak ruang daripada DRAM: untuk chip DDR4 4 GB berukuran sama, Anda akan mendapatkan SRAM senilai kurang dari 100 MB. Tetapi karena dibuat melalui proses yang sama seperti membuat CPU, SRAM dapat dibangun langsung di dalam prosesor, sedekat mungkin dengan unit logika.
Dengan setiap tahap tambahan, kita telah meningkatkan kecepatan pemindahan data, dengan biaya yang bisa dibilang masih masuk akal. Kita dapat terus menambahkan lebih banyak bagian, dengan masing-masing lebih cepat tetapi lebih kecil.
Jadi kita sampai pada definisi yang lebih teknis tentang apa itu cache, yaitu beberapa blok SRAM, semuanya terletak di dalam prosesor; mereka digunakan untuk memastikan bahwa unit logika tetap bekerja sesibuk mungkin, dengan mengirim dan menyimpan data pada kecepatan super cepat.
Cache: sebuah lahan parkir multi-level
Seperti yang telah kita diskusikan, cache diperlukan karena tidak ada sistem penyimpanan ajaib yang dapat memenuhi permintaan data dari unit logika dalam sebuah prosesor. CPU modern dan prosesor grafis berisi sejumlah blok SRAM, yang diatur secara internal ke dalam hierarki urutan cache yang diurutkan sebagai berikut:
Pada gambar di atas, CPU diwakili oleh persegi panjang putus-putus hitam. ALU (unit logika aritmatika) berada paling kiri; ini adalah struktur yang memberi daya pada prosesor, menangani matematika yang dilakukan chip. Meskipun secara teknis bukan cache, level memori terdekat ke ALU adalah register (mereka dikelompokkan bersama menjadi file register).
Masing-masing memegang satu nomor, seperti integer 64-bit; nilai itu sendiri dapat berupa sepotong data tentang sesuatu, kode untuk instruksi tertentu, atau alamat memori dari beberapa data lainnya.
File register di CPU desktop cukup kecil – misalnya, di Intel Core i9-9900K, ada dua bank di setiap inti, dan satu untuk bilangan bulat hanya berisi 180 register 64-bit. File register lainnya, untuk vektor (deretan kecil angka), memiliki 168 entri 256-bit. Jadi total file register untuk setiap inti sedikit di bawah 7 kB. Sebagai perbandingan, file register di Streaming Multiprocessors (GPU yang setara dengan inti CPU) dari Nvidia GeForce RTX 2080 Ti berukuran 256 kB.
Register adalah SRAM, sama seperti cache, tetapi secepat ALU yang mereka layani, mendorong data masuk dan keluar dalam satu siklus clock. Tetapi mereka tidak dirancang untuk menyimpan banyak data (hanya satu bagian saja), itulah sebabnya selalu ada beberapa blok memori yang lebih besar di dekatnya: ini adalah cache Level 1.
Gambar di atas adalah bidikan yang diperbesar dari satu inti dari desain prosesor desktop Skylake Intel.
ALU dan file register dapat dilihat di paling kiri, disorot dengan warna hijau. Di bagian tengah atas gambar, berwarna putih, adalah cache Data Tingkat 1. Ini tidak menyimpan banyak informasi, hanya 32 kB, tetapi seperti register, ini sangat dekat dengan unit logika dan berjalan pada kecepatan yang sama dengannya.
Persegi panjang putih lainnya menunjukkan cache Instruksi Level 1, juga berukuran 32 kB. Seperti namanya, ini menyimpan berbagai perintah yang siap untuk dibagi menjadi lebih kecil, yang disebut operasi mikro (biasanya diberi label sebagai μops), untuk dilakukan ALU. Ada cache untuk mereka juga, dan Anda dapat mengklasifikasikannya sebagai Level 0, karena lebih kecil (hanya menampung 1.500 operasi) dan lebih dekat daripada cache L1.
Anda mungkin bertanya-tanya mengapa blok SRAM ini sangat kecil; mengapa ukurannya tidak satu megabyte? Bersama-sama, cache data dan instruksi mengambil ruang dalam chip yang hampir sama dengan unit logika utama, jadi membuatnya lebih besar akan meningkatkan ukuran keseluruhan dadu.
Tetapi alasan utama mengapa mereka hanya memiliki kapasitas beberapa kB, adalah karena waktu yang dibutuhkan untuk mencari dan mengambil data meningkat seiring dengan bertambahnya kapasitas memori. Cache L1 harus sangat cepat, sehingga kompromi harus dicapai, antara ukuran dan kecepatan – paling banter, dibutuhkan sekitar 5 siklus clock (lebih lama untuk nilai titik mengambang) untuk mengeluarkan data dari cache ini, siap digunakan .
Tetapi jika ini adalah satu-satunya cache di dalam prosesor, maka kinerjanya akan tiba-tiba terhenti. Inilah sebabnya mengapa mereka semua memiliki level memori lain yang dibangun ke dalam inti: cache Level 2. Ini adalah blok penyimpanan umum, yang menyimpan instruksi dan data.
L2 cache selalu sedikit lebih besar dari L1: Prosesor AMD Zen 2 mengemas hingga 512 kB, sehingga cache tingkat yang lebih rendah dapat disimpan dengan baik. Namun, ukuran ekstra ini memiliki biaya, dan dibutuhkan kira-kira dua kali lebih lama untuk menemukan dan mentransfer data dari cache ini, dibandingkan dengan L1.
Kembali ke masa lalu, ke zaman Intel Pentium asli, cache Level 2 adalah chip yang terpisah, baik pada papan sirkuit plug-in kecil (seperti RAM DIMM) atau dibangun di motherboard utama. Ini akhirnya bekerja dengan cara ke paket CPU itu sendiri, sampai akhirnya diintegrasikan ke dalam CPU mati, seperti prosesor Pentium III dan AMD K6-III.
Perkembangan ini segera diikuti oleh level cache lain, di sana untuk mendukung level lain yang lebih rendah, dan itu muncul karena munculnya chip multi-core.
Gambar ini, dari chip Intel Kaby Lake, menunjukkan 4 inti di kiri-tengah (GPU terintegrasi menghabiskan hampir setengah dari cetakan, di sebelah kanan). Setiap inti memiliki set cache Level 1 dan 2 ‘pribadi’ sendiri (sorotan putih dan kuning), tetapi mereka juga hadir dengan set blok SRAM ketiga.
Cache level 3, meskipun berada langsung di sekitar satu inti, sepenuhnya dibagikan dengan yang lain – masing-masing dapat dengan bebas mengakses konten cache L3 orang lain. Ini jauh lebih besar (antara 2 dan 32 MB) tetapi juga jauh lebih lambat, rata-rata lebih dari 30 siklus, terutama jika inti perlu menggunakan data yang ada dalam blok cache yang agak jauh.
Di bawah ini, kita dapat melihat satu inti dalam arsitektur AMD Zen 2: data L1 32 kB dan cache instruksi berwarna putih, 512 KB L2 dengan warna kuning, dan blok cache L3 berukuran 4 MB berwarna merah.
Tunggu sebentar. Bagaimana 32 kB mengambil lebih banyak ruang fisik dari 512 kB? Jika Level 1 menampung begitu sedikit data, mengapa secara proporsional jauh lebih besar daripada cache L2 atau L3?
Lebih dari sekedar angka
Cache meningkatkan kinerja dengan mempercepat transfer data ke unit logika dan menyimpan salinan instruksi dan data yang sering digunakan di sekitar. Informasi yang disimpan dalam cache dibagi menjadi dua bagian: datanya sendiri dan lokasi tempat asalnya berada di memori / penyimpanan sistem – alamat ini disebut tag cache.
Saat CPU menjalankan operasi yang ingin membaca atau menulis data dari / ke memori, ini dimulai dengan memeriksa tag di cache Level 1. Jika yang diperlukan ada (cache hit), data itu kemudian dapat diakses hampir secara langsung. Cache miss terjadi jika tag yang diperlukan tidak berada di level cache terendah.
Jadi, tag baru dibuat di cache L1, dan arsitektur prosesor lainnya mengambil alih, menelusuri kembali level cache lainnya (kembali ke drive penyimpanan utama, jika perlu) untuk menemukan data untuk tag itu. Tetapi untuk membuat ruang di cache L1 untuk tag baru ini, sesuatu yang lain selalu harus di-boot ke L2.
Hal ini menghasilkan pengacakan data yang hampir konstan, semuanya dicapai hanya dalam beberapa siklus clock. Satu-satunya cara untuk mencapai ini adalah dengan memiliki struktur yang kompleks di sekitar SRAM, untuk menangani pengelolaan data. Dengan kata lain: jika inti CPU hanya terdiri dari satu ALU, maka L1 cache akan jauh lebih sederhana, tetapi karena ada lusinan (banyak di antaranya akan menyulap dua utas instruksi), cache memerlukan banyak koneksi untuk disimpan semuanya bergerak.
Anda dapat menggunakan program gratis, seperti CPU-Z, untuk memeriksa informasi cache untuk prosesor yang menjalankan komputer Anda sendiri. Tapi apa arti semua informasi itu? Elemen penting adalah kumpulan label asosiatif – ini semua tentang aturan yang diberlakukan oleh bagaimana blok data dari memori sistem disalin ke dalam cache.
Informasi cache di atas adalah untuk Intel Core i7-9700K. Cache Level 1-nya masing-masing dibagi menjadi 64 blok kecil, yang disebut set, dan masing-masing blok ini selanjutnya dibagi menjadi baris cache (berukuran 64 byte). Set asosiatif berarti bahwa satu blok data dari memori sistem dipetakan ke baris cache dalam satu set tertentu, daripada bebas dipetakan di mana saja.
Bagian 8-way memberi tahu kita bahwa satu blok dapat dikaitkan dengan 8 baris cache dalam satu set. Semakin besar tingkat asosiatif (yaitu lebih banyak ‘cara’), semakin baik peluang untuk mendapatkan cache saat CPU mencari data, dan pengurangan penalti yang disebabkan oleh cache miss. Kekurangannya adalah ia menambahkan lebih banyak kompleksitas, meningkatkan konsumsi daya, dan juga dapat menurunkan kinerja karena ada lebih banyak baris cache yang harus diproses untuk satu blok data.
Aspek lain dari kompleksitas cache berkisar pada bagaimana data disimpan di berbagai tingkatan. Aturan ditetapkan dalam sesuatu yang disebut kebijakan inklusi. Misalnya, prosesor Intel Core memiliki cache L1 + L3 yang sepenuhnya inklusif. Ini berarti bahwa data yang sama di Tingkat 1, misalnya, juga dapat berada di Tingkat 3. Ini mungkin tampak seperti membuang-buang ruang cache yang berharga, tetapi keuntungannya adalah jika prosesor kehilangan, saat mencari tag di bawah level, tidak perlu mencari melalui level yang lebih tinggi untuk menemukannya.
Dalam prosesor yang sama, cache L2 tidak inklusif: data apa pun yang disimpan di sana tidak disalin ke level lain. Ini menghemat ruang, tetapi mengakibatkan sistem memori chip harus mencari melalui L3 (yang selalu jauh lebih besar) untuk menemukan tag yang terlewat. Cache korban mirip dengan ini, tetapi mereka terbiasa dengan informasi tersimpan yang didorong keluar dari level yang lebih rendah – misalnya, prosesor AMD Zen 2 menggunakan cache korban L3 yang hanya menyimpan data dari L2.
Ada kebijakan lain untuk cache, seperti ketika data ditulis ke dalam cache dan memori sistem utama. Ini disebut kebijakan tulis (write) dan kebanyakan CPU saat ini menggunakan cache tulis kembali (rewrite); ini berarti bahwa ketika data ditulis ke tingkat cache, ada penundaan sebelum memori sistem diperbarui dengan salinannya. Untuk sebagian besar, jeda ini berjalan selama data tetap berada di cache – hanya setelah di-boot, RAM mendapatkan informasinya.
Untuk desainer prosesor, memilih jumlah, jenis, dan kebijakan cache adalah tentang menyeimbangkan keinginan untuk kemampuan prosesor yang lebih besar dengan peningkatan kompleksitas dan ruang die yang diperlukan. Jika memungkinkan untuk memiliki 20 MB, 1000 cara cache Level 1 asosiatif penuh tanpa chip menjadi seukuran Manhattan (dan mengkonsumsi jenis daya yang sama), maka kita semua akan memiliki komputer yang menggunakan chip seperti itu!
Tingkat cache terendah di CPU saat ini tidak banyak berubah dalam dekade terakhir. Namun, cache Level 3 terus bertambah ukurannya. Satu dekade yang lalu, Anda bisa mendapatkan 12 MB darinya, jika Anda cukup beruntung memiliki Intel i7-980X seharga $ 999. Untuk setengah dari jumlah itu hari ini, Anda mendapatkan 64 MB.
Cache, singkatnya: teknologi yang benar-benar dibutuhkan dan benar-benar mengagumkan. Kami belum melihat jenis cache lain di CPU dan GPU (seperti buffer pencarian terjemahan atau cache tekstur), tetapi karena semuanya mengikuti struktur dan pola level sederhana seperti yang telah kami bahas di sini, mungkin tidak terdengar seperti itu. rumit.
Apakah Anda memiliki komputer yang memiliki cache L2 di motherboard? Ingat CPU Pentium II dan Celeron berbasis slot (misalnya 300a) yang disertakan dalam papan anak? Apakah Anda ingat CPU pertama Anda yang berbagi L3? Beri tahu kami di bagian komentar.
Artikel disadur dan dialihbahasakan dari Techspot.
Leave a Reply