Senin, 09 Desember 2013

CPU Cache


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