Cache
CPU adalah cache yang digunakan oleh central processing unit (CPU) dari sebuah
komputer untuk mengurangi waktu rata-rata untuk mengakses memori . Cache adalah
lebih kecil, memori yang lebih cepat yang menyimpan salinan data dari yang
sering digunakan memori utama lokasi. Kebanyakan CPU memiliki cache independen
yang berbeda, termasuk instruksi dan data cache, di mana data cache biasanya
diatur sebagai sebuah hirarki tingkat cache yang lebih (L1, L2 dll)
Ketika
prosesor perlu membaca dari atau menulis ke sebuah lokasi di memori utama, cek
dulu apakah salinan data yang ada di cache. Jika demikian, prosesor segera
membaca dari atau menulis ke cache, yang jauh lebih cepat daripada membaca dari
atau menulis ke memori utama.
Paling
modern desktop dan server CPU memiliki setidaknya tiga cache independen: cache
instruksi untuk mempercepat instruksi dieksekusi mengambil, cache data untuk
mempercepat mengambil dan menyimpan data yang, dan penyangga terjemahan
lookaside (TLB) yang digunakan untuk mempercepat virtual-to- terjemahan alamat
fisik untuk kedua instruksi dieksekusi dan data. Data cache biasanya
diselenggarakan sebagai hirarki tingkat cache yang lebih (L1, L2, dll, lihat
cache Multi-level ).
Entri Cache
Data
ditransfer antara memori dan cache blok ukuran tetap, disebut baris cache.
Ketika garis cache akan disalin dari memori ke cache, entri cache dibuat. Entri
cache akan mencakup data yang disalin serta lokasi memori yang diminta
(sekarang disebut tag).
Ketika
prosesor perlu membaca atau menulis sebuah lokasi di memori utama, cek pertama
untuk entri yang sesuai dalam cache. Pemeriksaan cache untuk isi lokasi memori
yang diminta dalam setiap baris cache yang mungkin berisi alamat itu. Jika
prosesor menemukan bahwa lokasi memori dalam cache, cache hit telah terjadi.
Namun, jika prosesor tidak menemukan lokasi memori dalam cache, cache miss
terjadi. Dalam hal:
- hit
cache, prosesor segera membaca atau menulis data dalam baris cache
- cache
miss, cache mengalokasikan entri baru, dan salinan data dari memori utama,
kemudian, permintaan tersebut dipenuhi dari isi cache.
Kinerja Cache
Proporsi
akses yang menghasilkan cache hit dikenal sebagai hit rate, dan dapat menjadi
ukuran efektivitas cache untuk program tertentu atau algoritma.
Baca
merindukan menunda eksekusi karena mereka membutuhkan data yang akan ditransfer
dari memori jauh lebih lambat dari cache itu sendiri. Write misses mungkin
terjadi tanpa hukuman tersebut, karena prosesor dapat melanjutkan eksekusi
sedangkan data disalin ke memori utama di latar belakang.
Kebijakan Cache
Dalam
rangka untuk memberikan ruang bagi entri baru pada cache miss, cache mungkin
harus mengusir salah satu entri yang ada. The heuristik yang menggunakan untuk
memilih entri untuk mengusir disebut kebijakan penggantian. Masalah mendasar
dengan kebijakan penggantian adalah bahwa ia harus memprediksi ada entri cache
paling mungkin untuk digunakan di masa depan. Memprediksi masa depan adalah
sulit, sehingga tidak ada cara yang sempurna untuk memilih di antara berbagai
kebijakan pengganti.
Satu
kebijakan penggantian populer, paling-terakhir digunakan (LRU), menggantikan
entri paling baru diakses.
Menandai
beberapa memori berkisar sebagai non-cacheable dapat meningkatkan kinerja,
dengan menghindari caching daerah memori yang jarang diakses kembali. Hal ini
untuk menghindari overhead memuat sesuatu ke dalam cache, tanpa reuse apapun.
Entri
Cache juga dapat dinonaktifkan atau terkunci tergantung pada konteksnya.
Cache hirarki dalam prosesor
yang modern
Prosesor
modern memiliki beberapa cache berinteraksi pada chip. Pengoperasian cache
tertentu dapat sepenuhnya ditentukan oleh:
- ukuran
cache
- ukuran
cache blok
- jumlah
blok dalam satu set
- kebijakan
penggantian set Cache
- cache
kebijakan write (write-through atau write-back)
Sementara
semua blok cache cache tertentu adalah ukuran yang sama dan memiliki
associativity yang sama, biasanya "tingkat rendah" cache (seperti
cache L1) memiliki ukuran yang lebih kecil, memiliki blok yang lebih kecil, dan
memiliki lebih sedikit blok dalam satu set , sementara "tingkat
tinggi" cache (seperti cache L3) memiliki ukuran yang lebih besar, blok
yang lebih besar, dan lebih blok dalam satu set.
Implementasi
Cache
membaca adalah operasi CPU yang paling umum yang memakan waktu lebih dari satu
siklus. Waktu pelaksanaan program cenderung sangat sensitif terhadap latency
dari tingkat-1 cache data hit. Banyak usaha desain, dan sering kekuasaan dan
daerah silikon yang dikeluarkan membuat cache secepat mungkin.
Cache
sederhana adalah cache langsung dipetakan hampir diindeks. Alamat virtual
dihitung dengan adder, bagian yang relevan dari alamat diekstraksi dan
digunakan untuk indeks SRAM, yang mengembalikan data dimuat. Data tersebut byte
sejajar dalam shifter byte, dan dari sana dilewati untuk operasi berikutnya.
Tidak perlu untuk setiap tag memeriksa loop batin - pada kenyataannya, tag
perlu bahkan tidak dibaca. Kemudian dalam pipa, tapi sebelum instruksi beban
pensiun, tag untuk data dimuat harus dibaca, dan diperiksa terhadap alamat
virtual untuk memastikan ada cache hit. Pada miss, cache diperbarui dengan
baris cache yang diminta dan pipa di-restart.
Cache
asosiatif lebih rumit, karena beberapa bentuk tag harus dibaca untuk menentukan
masuknya cache untuk memilih. N-way set-asosiatif tingkat-1 cache yang biasanya
membaca semua N mungkin tag dan data N secara paralel, dan kemudian memilih
data yang terkait dengan tag yang cocok. Level-2 cache kadang-kadang menghemat
daya dengan membaca tag pertama, sehingga hanya satu elemen data dibaca dari
SRAM data.
Diagram
ke kanan dimaksudkan untuk memperjelas cara di mana berbagai bidang alamat yang
digunakan. Alamat bit 31 adalah yang paling signifikan, bit 0 adalah paling
signifikan. Diagram menunjukkan SRAMs, pengindeksan, dan multiplexing untuk 4
KB, 2-way set-asosiatif, hampir diindeks dan cache yang hampir tagged dengan 64
byte (B) baris, 32-bit membaca lebar dan 32-bit alamat virtual.
Karena
cache adalah 4 KB dan memiliki 64 baris B, hanya ada 64 baris dalam cache, dan
kita membaca dua pada waktu dari Tag SRAM yang memiliki 32 baris, masing-masing
dengan sepasang tag 21 bit. Meskipun fungsi dari alamat virtual bit 31 sampai 6
dapat digunakan untuk indeks tag dan data SRAMs, itu adalah sederhana untuk
menggunakan bit paling signifikan.
Demikian
pula, karena cache adalah 4 KB dan memiliki jalur membaca 4 B, dan membaca dua
cara untuk setiap akses, SRAM Data 512 baris dengan 8 byte lebar. Cache
yang lebih modern mungkin 16 KB, 4-way set-asosiatif, hampir diindeks, hampir
mengisyaratkan, dan secara fisik ditandai, dengan 32 jalur B, 32-bit membaca
lebar dan 36-bit alamat fisik. Path kekambuhan membaca cache tersebut terlihat
sangat mirip dengan jalan di atas. Alih-alih tag, vhints dibaca, dan dicocokkan
subset dari alamat virtual. Kemudian dalam pipa, alamat virtual diterjemahkan
ke alamat fisik oleh TLB, dan tag fisik dibaca (hanya satu, sebagai persediaan
vhint yang cara cache untuk membaca). Akhirnya alamat fisik dibandingkan dengan
tag fisik untuk menentukan apakah hit telah terjadi.
Beberapa
desain SPARC telah meningkatkan kecepatan cache L1 mereka dengan beberapa
penundaan gerbang dengan runtuh alamat penambah virtual ke dekoder SRAM. Lihat
Sum ditujukan decoder .
Tidak ada komentar:
Posting Komentar