Ketika kebutuhan prosesor untuk membaca
dari atau menulis ke sebuah lokasi di memori utama, pertama kali akan
memeriksa apakah salinan data terdapat di cache. Jika demikian, prosesor
segera membaca dari atau menulis ke cache, yang jauh lebih cepat
daripada membaca dari atau menulis ke memori utama.
Diagram
di sebelah kanan menunjukkan dua kenangan. Setiap lokasi di setiap
memori memiliki datum (cache line), yang dalam desain yang berbeda dalam
ukuran berkisar dari 8 to 512 byte. Ukuran garis cache biasanya lebih
besar daripada ukuran akses yang biasa diminta oleh instruksi CPU, yang
berkisar dari 1 sampai 16 byte. Setiap lokasi dalam memori masing-masing
juga memiliki indeks, yang merupakan nomor unik yang digunakan untuk
merujuk ke lokasi tersebut. Indeks untuk lokasi dalam memori utama
disebut alamat. Setiap lokasi dalam cache memiliki tag yang berisi
indeks dari datum dalam memori utama yang telah di-cache. Dalam data
cache CPU entri ini disebut cache baris atau blok cache.
Paling CPU desktop modern dan server
memiliki minimal tiga cache independen: sebuah instruksi cache untuk
mempercepat instruksi dieksekusi menjemput, data cache untuk mempercepat
mengambil dan menyimpan data, dan terjemahan lookaside buffer dipakai
untuk mempercepat virtual-ke-alamat fisik terjemahan untuk kedua
dieksekusi instruksi dan data.
Pengoperasian Ditail
Ketika kebutuhan prosesor untuk membaca
atau menulis suatu lokasi di memori utama, pertama kali akan memeriksa
apakah lokasi memori ada dalam cache. Hal ini dilakukan dengan
membandingkan alamat lokasi memori untuk semua tag dalam cache yang
mungkin berisi alamat itu. Jika prosesor menemukan bahwa lokasi memori
dalam cache, kita mengatakan bahwa cache hit telah terjadi; jika tidak,
kita berbicara tentang cache miss. Dalam kasus hit cache, prosesor
segera membaca atau menulis data dalam baris cache. Proporsi Akses yang
dihasilkan dalam cache hit dikenal sebagai tingkat memukul, dan
merupakan ukuran efektivitas cache.
Dalam kasus cache miss, cache
mengalokasikan sebagian besar entri baru, yang terdiri dari tag hanya
tidak terjawab dan salinan data dari memori. Referensi kemudian dapat
diterapkan pada entri baru seperti dalam kasus hit. Data yang relatif
lambat karena mereka memerlukan data yang akan ditransfer dari memori
utama. Incurs transfer ini tertunda karena memori utama jauh lebih
lambat dibandingkan dengan memori cache, dan juga incurs yang overhead
untuk merekam data baru dalam cache sebelum dikirim ke prosesor.
Dalam rangka untuk memberikan ruang bagi
entri baru pada cache miss, cache umumnya memiliki untuk membuang salah
satu entri yang sudah ada. The heuristik yang digunakan untuk memilih
entri untuk membuang disebut kebijakan penggantian. Masalah mendasar
dengan kebijakan penggantian adalah bahwa ia harus memprediksi entri
cache yang ada paling tidak mungkin untuk digunakan di masa depan.
Meramalkan masa depan adalah sulit, terutama untuk hardware cache yang
menggunakan aturan sederhana setuju untuk pelaksanaan di sirkuit, jadi
ada berbagai kebijakan untuk memilih pengganti dari dan tidak ada cara
yang sempurna untuk memutuskan di antara mereka. Satu kebijakan
penggantian populer, LRU, menggantikan yang paling terakhir digunakan
entri.
Ketika data ditulis ke cache, harus pada
titik tertentu ditulis ke memori utama juga. Waktu menulis ini
dikendalikan oleh apa yang dikenal sebagai kebijakan menulis. Dalam
write-through cache, setiap menulis ke cache menyebabkan menulis ke
memori utama. Atau, dalam write-back atau salin-kembali cache, menulis
tidak langsung dicerminkan ke memori. Sebaliknya, cache lokasi track
yang telah ditulis di atas (lokasi ini ditandai kotor). Data di lokasi
tersebut ditulis kembali ke memori utama apabila data yang diusir dari
cache. Untuk alasan ini, sebuah kehilangan dalam write-back cache akan
sering memerlukan dua memori akses pada pelayanan: satu untuk pertama
menulis lokasi yang kotor ke memori dan kemudian lain untuk membaca
lokasi baru dari memori.
Ada kebijakan serta menengah. Mungkin
cache write-through, tetapi menulis dapat diadakan dalam antrian yang
menyimpan data sementara, biasanya beberapa media penyimpanan sehingga
dapat diproses bersama-sama (yang dapat mengurangi siklus bus dan
sehingga meningkatkan pemanfaatan bus).
Hierarki cache di prosesor modern Specialized caches
Pipelined CPU mengakses memori dari
beberapa poin dalam pipa: instruksi menjemput, virtual-ke-terjemahan
alamat fisik, dan data fetch (lihat klasik RISC pipa). Desain alami
adalah dengan menggunakan cache fisik yang berbeda untuk masing-masing
titik-titik ini, sehingga tidak ada satu sumber daya fisik harus
dijadwalkan untuk melayani dua titik dalam jaringan pipa. Dengan
demikian, secara alami pipa berakhir dengan setidaknya tiga cache
terpisah (instruksi, BIS, dan data), masing-masing khusus terhadap peran
tertentu.
Pipa dengan instruksi dan data terpisah
cache, sekarang dominan, yang dikatakan memiliki arsitektur Harvard.
Awalnya, frase ini disebut mesin dengan instruksi dan data yang terpisah
kenangan, yang terbukti sama sekali tidak populer. CPU modern memiliki
satu-memori arsitektur von Neumann.
Victim cache
Victim cache
Korban Cache adalah cache digunakan untuk
menyimpan blok diusir dari cache pada CPU penggantian. Cache korban
terletak di antara cache utama dan jalan isi ulang, dan hanya memegang
blok yang diusir dari cache utama. Cache korban biasanya sepenuhnya
asosiatif, dan dimaksudkan untuk mengurangi jumlah konflik meleset.
Banyak program yang biasa digunakan tidak memerlukan pemetaan asosiatif
untuk semua akses. Pada kenyataannya, hanya sebagian kecil dari
mengakses memori dari program memerlukan associativity tinggi. Cache
korban eksploitasi properti ini dengan menyediakan associativity tinggi
hanya akses ini. Ini diperkenalkan oleh Norman Jouppi pada tahun 1990.
Trace cache
Salah satu contoh yang lebih ekstrem
spesialisasi Trace cache adalah yang ditemukan dalam mikroprosesor Intel
Pentium 4. Sebuah trace Cache adalah mekanisme untuk mengambil
instruksi meningkatkan bandwidth dan mengurangi konsumsi daya (dalam
kasus Pentium 4) dengan menyimpan jejak-jejak instruksi yang sudah
diambil dan diterjemahkan.
Diakui secara luas yang paling awal
publikasi akademik trace cache oleh Eric Rotenberg, Steve Bennett, dan
Jim Smith pada tahun 1996 mereka kertas “Trace Cache: Pendekatan Latency
Rendah ke Tinggi Mengambil Instruksi Bandwidth.”
Sebuah Penyimpanan Trace cache instruksi
baik setelah mereka telah diterjemahkan, atau karena mereka pensiun.
Secara umum, instruksi yang ditambahkan untuk melacak cache dalam
kelompok-kelompok yang mewakili blok dasar baik perorangan atau dinamis
jejak instruksi. Blok dasar terdiri dari kelompok non-instruksi cabang
yang berakhir dengan sebuah cabang. A dinamis trace ( “trace path”)
hanya berisi instruksi yang hasilnya benar-benar digunakan, dan
menghilangkan instruksi yang diambil berikut cabang (karena mereka tidak
dijalankan); jejak yang dinamis bisa menjadi dasar Rangkaian dari
beberapa blok. Hal ini memungkinkan unit fetch instruksi prosesor untuk
mengambil beberapa dasar blok, tanpa harus khawatir tentang cabang di
aliran eksekusi.
Multi-level caches
Masalah lainnya adalah fundamental cache
tradeoff antara tingkat latensi dan memukul. Cache lebih besar lebih
baik tingkat terkena tapi lagi latency. Untuk mengatasi tradeoff ini,
banyak komputer yang menggunakan beberapa tingkat cache, dengan cache
cepat kecil didukung oleh lebih lambat cache.
Multi-level cache umumnya beroperasi
dengan memeriksa terkecil Level 1 (L1) cache pertama; jika hit, prosesor
berlangsung dengan kecepatan tinggi. Jika cache misses yang lebih
kecil, lebih besar berikutnya cache (L2) dicentang, dan seterusnya,
sebelum memori eksternal dicentang.
Sebagai perbedaan latency antara memori
utama dan cache tercepat telah menjadi lebih besar, beberapa prosesor
telah mulai memanfaatkan sebanyak tiga tingkat on-chip cache. Misalnya,
Alpha 21164 (1995) memiliki 96 KB on-die cache L3; IBM Power4 (2001)
memiliki 256 MB L3 cache off-chip, dibagi di antara beberapa prosesor;
Itanium 2 (2003) memiliki 6 MB terpadu tingkat 3 (L3) cache on-die;
Intel Xeon MP kode produk bernama “Tulsa” (2006) fitur 16 MB on-die
cache L3 dibagi antara dua prosesor cores; AMD Phenom II (2008) memiliki
hingga 6 MB on-die unified L3 cache; dan Intel Core i7 (2008) mempunyai
8 MB on-die unified L3 cache yang inklusif, bersama-sama oleh semua
core. Manfaat dari suatu L3 cache tergantung pada pola akses aplikasi.
Selengkapnya baca di Wikipedia