Cache Memory


Sebuah CPU cache adalah cache yang digunakan oleh unit pengolah pusat dari sebuah komputer untuk mengurangi waktu rata-rata untuk mengakses memori. Cache adalahmemori yang lebih kecil, lebih cepat yang menyimpan salinan data dari lokasi yang paling sering digunakan memori utama. Selama mengakses memori sebagian besarlokasi memori cache, latency rata-rata mengakses memori akan lebih dekat denganlatency cache yang daripada latency dari memori utama.

Overview

Ketika prosesor perlu membaca dari atau menulis ke sebuah lokasi di memori utama, pertama kali cek apakah salinan data yang ada di cache. Jika demikian, prosesorsegera membaca dari atau menulis ke cache, yang jauh lebih cepat daripada membacadari atau menulis ke memori utama.

Paling modern desktop dan server CPU memiliki setidaknya tiga cache independen:sebuah cache instruksi untuk mempercepat eksekusi instruksi fetch, data cache untuk mempercepat Data mengambil dan menyimpan, dan terjemahan penyangga lookaside(TLB) yang digunakan untuk mempercepat virtual-to-alamat fisik terjemahan untuk keduainstruksi dieksekusi dan data. Cache data biasanya diatur sebagai sebuah hirarkitingkat cache lebih (L1, L2, dll, lihat Multi-level cache).

Cache Entries

Memori dibagi menjadi “lokasi”, yang sesuai untuk cache “garis”. Setiap akses data yang melibatkan cache menggunakan ukuran ini, yang cenderung lebih besar dari ukuran CPU terbesar permintaan. (Ini biasanya ukuran sebuah register CPU: 2 byte untuk PDP-11, 4 byte untuk sebuah register tujuan umum / 8 byte untuk register floating-point dalam arsitektur MIPS, dan 16 byte untuk register XMM dalam prosesor x86dengan SSE).

Setiap lokasi dalam memori dapat diidentifikasi oleh alamat memori fisik. Bila memoridisalin ke cache, entri cache dibuat. Hal ini dapat meliputi:

  • lokasi memori yang diminta (sekarang disebut tag)
  • salinan data

Ketika prosesor perlu membaca atau menulis sebuah lokasi di memori utama, cekpertama untuk entri yang sesuai dalam cache. Cache memeriksa isi dari lokasi memori yang diminta dalam setiap baris cache yang mungkin mengandung alamat tersebut.Jika prosesor menemukan bahwa lokasi memori berada di dalam cache, cache hittelah terjadi (jika tidak, cache miss).

  • Dalam kasus hit cache, prosesor segera membaca atau menulis data dalam baris cache.
  • Dalam kasus miss cache, cache mengalokasikan entri baru, dan salinan data dari memori utama. Kemudian, permintaan tersebut dipenuhi dari isi cache.

Cache Performance

Proporsi akses yang menghasilkan hit cache dikenal sebagai hit rate, dan dapat menjadi ukuran efektivitas dari 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. Menulis misses dapat terjadi tanpa hukuman seperti itu, karena prosesor dapat melanjutkan eksekusisedangkan data akan disalin ke memori utama di latar belakang.

Cache instruksi mirip dengan cache data, tapi CPU hanya melakukan akses read (instruksi mengambil) untuk cache instruksi. (Dengan Harvard-arsitektur CPU, instruksidan data cache dapat dipisahkan untuk kinerja yang lebih tinggi, tetapi mereka jugadapat dikombinasikan untuk mengurangi overhead perangkat keras.

Replacement Policies

Untuk membuat ruang untuk entri baru pada miss cache, cache mungkin harusmengusir salah satu entri yang ada. Heuristik yang menggunakan untuk memilih entriuntuk mengusir 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. Memprediksi masa depan adalah sulit,sehingga tidak ada cara sempurna untuk memilih di antara berbagai kebijakanpenggantinya.

Satu pengganti kebijakan populer, paling-terakhir digunakan (LRU), menggantikan entripaling baru diakses.
Menandai beberapa rentang memori sebagai non-cacheable dapat meningkatkan kinerja, dengan menghindari caching daerah memori yang jarang kembali diakses. Hal ini untuk menghindari overhead memuat sesuatu ke dalam cache, tanpa harus kembaliapapun.
Entri Cache juga dapat diblokir atau dikunci tergantung pada konteks.

Write Policies

Jika data ditulis ke cache, di beberapa titik juga harus ditulis ke memori utama. Waktumenulis ini dikenal sebagai kebijakan menulis.

  • Dalam write-through cache, setiap menulis ke cache menyebabkan menulis ke memori utama.
  • Atau, dalam cache write-back atau copy-kembali, menulis tidak segera mencerminkanke memori utama. Sebaliknya, lagu cache yang lokasi telah ditulis di atas (lokasi tersebut ditandai kotor). Data di lokasi tersebut ditulis kembali ke memori utama hanya ketika data yang diusir dari cache. Untuk alasan ini, miss dalam cache write-backkadang-kadang mungkin memerlukan akses memori dua layanan: satu untuk pertama menulis lokasi yang kotor ke memori dan kemudian lain untuk membaca lokasi barudari memori.

Ada kebijakan menengah juga. Cache mungkin menulis-melalui, tetapi menulis dapat diadakan dalam antrian menyimpan data sementara, biasanya sehingga beberapa toko dapat diproses bersama-sama (yang dapat mengurangi perputaran bus danmeningkatkan pemanfaatan bus).

Data dalam memori utama sedang di-cache dapat diubah oleh entitas lain (misalnyaperipheral menggunakan akses memori langsung atau multi-core prosesor), dalam halsalinan dalam cache dapat menjadi out-of-date atau basi. Atau, ketika CPU dalam multi-core prosesor update data dalam cache, salinan data di cache yang terkaitdengan core lain akan menjadi basi. Komunikasi protokol antara manajer cache yangmenyimpan data yang konsisten dikenal sebagai protokol koherensi cache.

CPU stalls

Waktu yang dibutuhkan untuk mengambil satu baris cache dari memori (baca latency)penting karena CPU akan kehabisan hal untuk dilakukan sementara menunggu datum.Ketika CPU mencapai keadaan ini, hal itu disebut warung.

Seperti CPU menjadi lebih cepat, karena warung untuk cache misses menggantikanperhitungan lebih potensial; CPU modern dapat menjalankan ratusan petunjuk di waktu yang dibutuhkan untuk mengambil sebuah baris cache tunggal dari memori utama.Berbagai teknik telah digunakan untuk menjaga CPU sibuk selama ini.

  • Out-of-order CPU (Pentium Pro dan kemudian desain Intel, misalnya) upaya untukmengeksekusi instruksi independen setelah instruksi yang menunggu untuk data cache miss.
  • Teknologi lain, yang digunakan oleh banyak prosesor, adalah multithreading simultan (TPS), atau – di Intel terminologi – hyper-threading (HT), yang memungkinkan sebuahbenang alternatif untuk menggunakan core CPU sementara thread pertama menunggudata yang berasal dari memori utama .

jangan lupa juga gan,instal ini di komputer agan supaya bermanfaat sekaligus dapat dolar.jangan lupa daftar dulu ea.🙂

instal gomez di komputer anda dapatkan $45 setiap bulannya

Cache entry structure

Cache entri baris biasanya memiliki struktur sebagai berikut:

tag data block flag bits

Blok data (baris cache) berisi data yang sebenarnya diambil dari memori utama. Tag ini berisi (bagian dari) alamat dari data yang sebenarnya diambil dari memori utama. Bit-bitbendera dibahas di bawah ini.

Ukuran “” dari cache adalah jumlah data memori utama dapat terus. Ukuran ini dapat dihitung sebagai jumlah byte yang disimpan dalam setiap kali blok data jumlah blokdisimpan dalam cache. (Jumlah bit tag dan bendera tidak relevan dengan perhitungan ini, meskipun tidak mempengaruhi area fisik cache).

Sebuah alamat memori yang efektif dibagi (MSB ke LSB) ke dalam tag, indeks dan blok offset.

tag index block offset

Indeks ini menggambarkan yang baris cache (yang baris cache) bahwa data telahmeletakkan masuk Panjang indeks bit. Blok offset menentukan data yang diinginkandalam blok data yang disimpan dalam baris cache. Biasanya alamat yang efektif adalahdalam byte, sehingga panjang blok offset bit. Tag ini berisi bit yang paling signifikan dari alamat, yang diperiksa terhadap baris saat ini (baris telah diambil oleh indeks) untukmelihat apakah yang kita butuhkan atau lokasi memori lain, tidak relevan yang terjadimemiliki bit indeks yang sama seperti yang kita inginkan. Panjang tag dalam bit.

Beberapa penulis mengacu pada blok diimbangi hanya sebagai “Offset” atau “perpindahan”.

Flag bits

Sebuah cache instruksi hanya memerlukan satu bit per bendera entri cache baris: sedikit yang valid. Bit yang valid menunjukkan apakah suatu blok cache telah dimuat dengan data yang valid.

Di power-up, perangkat keras set semua bit berlaku di semua cache untuk “tidak valid”.Beberapa sistem juga menetapkan bit valid untuk “tidak valid” pada waktu lain – seperti ketika multi-master bus mengintip perangkat keras dalam cache dari satu prosesormendengar siaran alamat dari beberapa prosesor lain, dan menyadari bahwa blok datatertentu dalam cache lokal sekarang basi dan harus ditandai valid.

Sebuah cache data biasanya memerlukan bit bendera dua per entri cache baris: sedikitvalid dan juga sedikit kotor. Bit kotor menunjukkan apakah blok yang telah berubah sejakdibaca dari memori utama – “bersih” – atau apakah prosesor telah menulis data ke blok yang (dan nilai baru belum berhasil sampai ke memori utama ) – “kotor”.

Associativity

Kebijakan penggantian memutuskan mana dalam cache salinan entri tertentu darimemori utama akan pergi. Jika kebijakan penggantian bebas untuk memilih entri dalamcache untuk menyimpan copy, cache disebut sepenuhnya asosiatif. Pada ekstrem yanglain, jika setiap entri dalam memori utama bisa pergi hanya dalam satu tempat dalam cache, cache dipetakan langsung. Cache Banyak melaksanakan kompromi di mana setiap entri dalam memori utama dapat pergi ke salah satu tempat N dalam cache, dan dijelaskan sebagai N-way set asosiatif. Sebagai contoh, tingkat-1 data cache di AMD Athlon adalah 2-arah set asosiatif, yang berarti bahwa setiap lokasi tertentu di memori utama dapat di-cache dalam salah satu dari 2 lokasi di cache level-1 data.

Associativity adalah trade-off. Jika ada sepuluh tempat dimana kebijakan penggantianbisa dipetakan lokasi memori, maka untuk memeriksa apakah lokasi yang ada dicache, sepuluh entri cache harus dicari. Memeriksa tempat lebih membutuhkan daya lebih, luas chip, dan berpotensi waktu. Di sisi lain, cache dengan associativity lebihmenderita meleset sedikit (lihat merindukan konflik, di bawah), sehingga CPU buang waktu kurang membaca dari memori utama lambat. Aturan praktis adalah bahwa dua kali lipat associativity, dari langsung dipetakan ke 2-arah, atau dari 2-cara untuk 4-arah, memiliki sekitar efek yang sama pada hit rate sebagai dua kali lipat ukuran cache.Associativity meningkat melampaui 4-arah banyak berpengaruh kurang pada hit rate,dan biasanya dilakukan untuk alasan lain (lihat aliasing virtual, di bawah).

Agar lebih buruk tapi sederhana untuk lebih baik tetapi kompleks:

  • cache-yang dipetakan langsung terbaik (tercepat) kali memukul, dan sebagainyatradeoff terbaik untuk “besar” cache
  • 2-arah Cache asosiatif set
  • 2-arah Cache asosiatif miring – “tradeoff terbaik untuk …. cache yang ukuran berada dalam rentang byte-4K 8K” – André Seznec
  • 4-arah Cache asosiatif set
  • sepenuhnya asosiatif cache – yang (terendah) terbaik rindu tarif, dan sebagainyatradeoff terbaik ketika hukuman rindu sangat tinggi

Direct-mapped cache

Berikut datum masing-masing hanya bisa masuk satu entri. Ia tidak memiliki kebijakan penggantian seperti itu, karena tidak ada pilihan yang datum untuk mengusir. Ini berarti bahwa jika dua lokasi peta ke entri yang sama, mereka terus-menerus dapat mengetuksatu sama lain. Meskipun sederhana, cache dipetakan langsung harus jauh lebih besar dari satu asosiatif untuk memberikan kinerja yang sebanding, dan lebih tak terduga.

2-way set associative cache

Jika setiap lokasi di memori utama dapat di-cache dalam salah satu dari dua lokasi dicache, satu pertanyaan logis adalah: yang dua? Skema sederhana dan paling umum digunakan, ditampilkan dalam diagram kanan atas, adalah dengan menggunakan bit paling signifikan dari indeks lokasi memori sebagai indeks untuk memori cache, danmemiliki dua masukan untuk setiap indeks. Salah satu manfaat dari skema ini adalahbahwa tag disimpan dalam cache tidak perlu termasuk bagian dari alamat memori utama yang tersirat dengan indeks memori cache tersebut. Sejak tag cache yangmemiliki bit lebih sedikit, mereka mengambil daerah kurang pada chip mikroprosesordan dapat dibaca dan dibandingkan lebih cepat. Juga LRU sangat sederhana karena hanya satu bit harus disimpan untuk setiap pasangan.

Speculative execution

Salah satu keuntungan dari cache yang dipetakan langsung yang memungkinkanspekulasi sederhana dan cepat. Setelah alamat tersebut telah dihitung, satu cacheindeks yang mungkin memiliki salinan dari datum yang dikenal. Bahwa entri cache dapat dibaca, dan prosesor dapat terus bekerja dengan data sebelum selesai memeriksabahwa tag tersebut benar-benar sesuai dengan alamat yang diminta.

Ide memiliki prosesor menggunakan data cache sebelum pertandingan selesai tagdapat diterapkan untuk cache asosiatif juga. Sebuah subset dari tag, disebut isyarat,dapat digunakan untuk memilih hanya salah satu entri cache mungkin memetakan ke alamat yang diminta. Datum ini kemudian dapat digunakan secara paralel denganmemeriksa tag penuh. Teknik petunjuk yang terbaik bila digunakan dalam konteksterjemahan alamat, seperti yang dijelaskan di bawah ini.

2-way skewed associative cache

Skema lainnya telah diusulkan, seperti cache miring, di mana indeks 0 adalah caralangsung, seperti di atas, tetapi indeks untuk cara 1 dibentuk dengan fungsi hash.Sebuah fungsi hash yang baik memiliki sifat yang membahas yang bertentangan denganpemetaan langsung cenderung tidak bertentangan ketika dipetakan dengan fungsi hash, dan sehingga sangat kecil kemungkinan bahwa program akan menderita dari nomor tak terduga besar konflik meleset karena akses patologis pola. The downside adalahlatency tambahan dari menghitung hash function.Additionally, ketika tiba saatnya untuk memuat baris baru dan mengusir garis tua, mungkin sulit untuk menentukan garis yang ada itu paling lama digunakan, karena konflik baris baru dengan data pada indeksdengan cara masing-masing; LRU pelacakan untuk non-miring cache biasanya dilakukan pada basis per-set. Namun demikian, miring-cache asosiatif memiliki keunggulan besar atas konvensional set-associative yang.

Pseudo-associative cache

Sebuah persediaan set-associative benar menguji semua cara yang mungkin secara bersamaan, menggunakan sesuatu seperti memori dialamatkan konten. Sebuah persediaan pseudo-asosiatif menguji setiap cara yang mungkin satu per satu. Sebuah persediaan hash-pengulangan adalah salah satu jenis pseudo-asosiatif cache.

Dalam kasus umum mencari hit di cara pertama diuji, cache pseudo-asosiatif adalah sebagai cepat sebagai cache langsung dipetakan. Tetapi memiliki tingkat konflik yang jauh lebih rendah daripada rindu cache dipetakan langsung, lebih dekat dengan tingkat kehilangan dari cache sepenuhnya asosiatif.

Cache miss

Sebuah rindu Cache mengacu pada usaha yang gagal untuk membaca atau menulis sepotong data di cache, yang menghasilkan akses memori utama dengan latency lebih lama lagi. Ada tiga jenis cache misses: instruksi read rindu, rindu membaca data, dan data menulis miss.

Cache membaca luput dari cache instruksi biasanya menyebabkan penundaan besar, karena prosesor, atau setidaknya thread eksekusi, harus menunggu (kios) sampai instruksi diambil dari memori utama.

Cache membaca luput dari data cache biasanya menyebabkan keterlambatan kurang, karena instruksi tidak tergantung pada baca cache dapat ditempatkan dan melanjutkan eksekusi sampai data kembali dari memori utama, dan instruksi tergantung dapat melanjutkan eksekusi.

Cache menulis lewatkan untuk data cache umumnya menyebabkan keterlambatan setidaknya, karena menulis dapat antrian dan ada beberapa keterbatasan pada pelaksanaan instruksi berikutnya. Prosesor ini dapat berlanjut sampai antrian sudah penuh.

Untuk menurunkan Cache miss rate, banyak analisa telah dilakukan pada perilaku cache pada upaya untuk menemukan kombinasi terbaik dari ukuran, associativity, ukuran blok, dan sebagainya. Urutan dari memori acuan yang dilakukan oleh program benchmark disimpan sebagai jejak alamat. Analisis selanjutnya mensimulasikan banyak desain yang berbeda cache yang mungkin pada jejak ini alamat lama. Membuat rasa bagaimana banyak variabel mempengaruhi tingkat cache hit bisa sangat membingungkan. Salah satu kontribusi penting bagi analisis ini dibuat oleh Mark Hill, yang dipisahkan misses menjadi tiga kategori (dikenal sebagai Tiga Cs):

Misses misses Wajib adalah mereka yang disebabkan oleh referensi pertama untuk sebuah datum. Cache ukuran dan associativity membuat perbedaan untuk jumlah misses wajib. Prefetching dapat membantu di sini, demikian juga ukuran cache yang lebih besar blok (yang merupakan bentuk prefetching). Misses Wajib kadang-kadang disebut sebagai misses dingin.
Misses misses Kapasitas adalah mereka yang terjadi terlepas dari ukuran associativity atau blok, semata-mata karena ukuran terbatas cache. Kurva laju kapasitas rindu dibandingkan ukuran cache memberikan beberapa ukuran lokalitas temporal aliran referensi tertentu. Perhatikan bahwa tidak ada pengertian yang berguna cache menjadi “penuh” atau “kosong” atau “kapasitas dekat”: CPU cache hampir selalu memiliki hampir setiap baris diisi dengan salinan beberapa baris dalam memori utama, dan hampir setiap alokasi baru line memerlukan pengusiran dari garis tua.
Misses misses Konflik adalah mereka yang bisa dihindari, telah cache tidak digusur entri sebelumnya. Misses Konflik dapat lebih dipecah menjadi misses pemetaan, yang tidak dapat dihindari mengingat jumlah tertentu dari associativity, dan merindukan penggantian, yang karena pilihan korban tertentu dari kebijakan penggantian.

Grafik sebelah kanan adalah ringkasan kinerja cache yang terlihat pada bagian Integer dari CPU2000 benchmark SPEC, seperti yang dikumpulkan oleh Hill dan Cantin. Tolok ukur ini dimaksudkan untuk mewakili jenis beban kerja bahwa komputer workstation rekayasa mungkin melihat pada setiap hari. Pembaca harus diingat bahwa menemukan benchmark yang bahkan berguna perwakilan dari banyak program yang telah sangat sulit, dan akan selalu ada program penting dengan perilaku yang sangat berbeda dari yang ditampilkan di sini.

Kita bisa melihat efek yang berbeda dari tiga Cs dalam grafik ini.

Di bagian paling kanan, dengan ukuran cache berlabel “Inf”, kita memiliki misses wajib.Jika kita ingin meningkatkan kinerja mesin di SpecInt2000, meningkatkan ukuran cache melebihi 1 MB pada dasarnya sia-sia. Itulah wawasan diberikan oleh misses wajib.

Tingkat Cache asosiatif penuh rindu di sini hampir mewakili tingkat kapasitas miss.Perbedaannya adalah bahwa data yang disajikan adalah dari simulasi dengan asumsi kebijakan penggantian LRU. Menampilkan tingkat kapasitas rindu akan membutuhkan kebijakan penggantian sempurna, yaitu sebuah oracle yang terlihat ke masa depan untuk menemukan entri cache yang sebenarnya tidak akan terkena.

Perhatikan bahwa pendekatan kami dari tingkat kapasitas rindu jatuh tajam antara 32 kB dan 64 kB. Hal ini menunjukkan bahwa benchmark memiliki seperangkat kerja sekitar 64 kB. Sebuah CPU cache desainer memeriksa patokan ini akan memiliki insentif yang kuat untuk mengatur ukuran cache untuk 64 kB bukan 32 kB. Perhatikan bahwa, pada benchmark ini, tidak ada jumlah associativity dapat membuat cache 32 kB melakukan serta cara 4-64 kB, atau bahkan langsung dipetakan 128 tembolok kB.

Akhirnya, perhatikan bahwa antara 64 kB dan 1 MB ada perbedaan besar antara cache dipetakan langsung dan sepenuhnya asosiatif. Perbedaan ini adalah konflik tingkat rindu. Wawasan dari melihat tingkat konflik rindu adalah bahwa cache sekunder mendapatkan keuntungan banyak dari associativity tinggi.

Manfaat ini terkenal di tahun 80-an dan awal 90-an, ketika desainer CPU tidak bisa muat besar cache on-chip, dan tidak bisa mendapatkan bandwidth yang cukup baik memori data cache atau memori cache tag untuk menerapkan associativity tinggi di off-chip cache . Hacks putus asa dicobakan yaitu R8000 MIPS digunakan mahal off-chip SRAMs tag berdedikasi, yang telah tertanam tag pembanding dan driver besar di garis pertandingan, untuk menerapkan 4 MB 4-arah Cache asosiatif. Para R10000 MIPS menggunakan chip SRAM biasa untuk tag. Tag akses untuk kedua cara mengambil dua siklus. Untuk mengurangi latency, R10000 akan menebak mana cara cache akan memukul pada akses masing-masing.

Address translation

CPU tujuan yang paling umum menerapkan beberapa bentuk memori virtual. Untuk meringkas, setiap program yang berjalan pada mesin melihat alamat sendiri ruang disederhanakan, yang berisi kode dan data untuk program saja. Setiap program menggunakan ruang alamat virtual tanpa memperhatikan di mana itu ada dalam memori fisik.

Virtual memory membutuhkan prosesor untuk menerjemahkan alamat virtual yang dihasilkan oleh program ke alamat fisik di memori utama. Bagian dari prosesor yang melakukan terjemahan ini dikenal sebagai unit manajemen memori (MMU). Jalur cepat melalui MMU dapat melakukan penjabaran disimpan dalam terjemahan lookaside buffer (TLB), yang merupakan cache pemetaan dari tabel halaman sistem operasi.

Untuk keperluan pembahasan ini, ada tiga fitur penting dari terjemahan alamat:

Latency: Alamat fisik adalah tersedia dari MMU beberapa waktu, mungkin beberapa siklus, setelah alamat virtual tersedia dari generator alamat.
Aliasing: Beberapa alamat virtual dapat memetakan ke alamat fisik tunggal.Kebanyakan prosesor menjamin bahwa semua update ke alamat fisik tunggal akan terjadi dalam rangka program. Untuk memenuhi jaminan bahwa, prosesor harus memastikan bahwa hanya satu salinan dari alamat fisik berada di cache pada waktu tertentu.
Granularity: Ruang alamat virtual ini dipecah menjadi halaman. Misalnya, 4 GB ruang alamat virtual mungkin dipotong menjadi 1048576 halaman 4 ukuran kB, masing-masing yang dapat mandiri dipetakan. Mungkin ada beberapa halaman ukuran didukung, lihat memori virtual untuk elaborasi.
Sebuah catatan sejarah:. Beberapa sistem memori virtual adalah awal sangat lambat, karena mereka memerlukan akses ke tabel halaman (yang diselenggarakan di memori utama) sebelum setiap akses diprogram ke memori utama [NB 1] Dengan tidak cache, ini secara efektif mengurangi kecepatan mesin di setengah. Cache perangkat keras pertama kali digunakan dalam sistem komputer tidak sebenarnya cache data atau instruksi, melainkan sebuah TLB.

Cache dapat dibagi menjadi 4 jenis, berdasarkan apakah indeks atau tag sesuai dengan alamat fisik atau virtual:

Secara fisik diindeks, secara fisik ditandai (PIPT) cache menggunakan alamat fisik untuk kedua indeks dan tag. Sementara ini sederhana dan menghindari masalah dengan aliasing, juga lambat, sebagai alamat fisik harus mendongak (yang dapat melibatkan miss TLB dan akses ke memori utama) sebelum alamat yang dapat mendongak dalam cache.
Hampir diindeks, hampir tagged (VIVT) cache menggunakan alamat virtual untuk kedua indeks dan tag. Skema caching dapat menghasilkan pencarian lebih cepat, karena MMU tidak perlu berkonsultasi terlebih dahulu untuk menentukan alamat fisik untuk alamat virtual yang diberikan. Namun, VIVT menderita masalah aliasing, dimana beberapa alamat virtual yang berbeda bisa merujuk ke alamat fisik yang sama.Hasilnya adalah bahwa alamat tersebut akan di-cache terpisah meskipun mengacu pada memori yang sama, menyebabkan masalah koherensi. Masalah lain adalah homonim, dimana peta alamat yang sama virtual untuk beberapa alamat fisik yang berbeda. Hal ini tidak mungkin untuk membedakan pemetaan dengan hanya mencarinya di indeks virtual, meskipun solusi potensial meliputi: pembilasan cache setelah context switch, memaksa ruang alamat menjadi tidak tumpang tindih, penandaan alamat virtual dengan ID ruang alamat (ASID) , atau menggunakan tag fisik.Selain itu, ada masalah yang virtual-ke-fisik pemetaan bisa berubah, yang akan membutuhkan pembilasan baris cache, sebagai VAS tidak lagi berlaku.
Hampir diindeks, secara fisik ditandai (VIPT) cache menggunakan alamat virtual untuk indeks dan alamat fisik di tag. Keuntungan lebih PIPT adalah latency rendah, sebagai baris cache dapat mendongak secara paralel dengan terjemahan BIS, namun tag tidak bisa dibandingkan sampai alamat fisik tersedia. Keuntungan lebih VIVT adalah bahwa karena tag memiliki alamat fisik, cache dapat mendeteksi homonyms. VIPT memerlukan bit tag lebih, sebagai bit indeks tidak lagi mewakili alamat yang sama.
Secara fisik diindeks, cache hampir tagged hanya teoritis karena mereka pada dasarnya akan sia-sia.
Kecepatan ini kambuh (latency beban) sangat penting untuk kinerja CPU, dan paling modern tingkat-1 cache yang hampir diindeks, yang setidaknya memungkinkan TLB MMU itu lookup untuk melanjutkan secara paralel dengan mengambil data dari RAM cache.

Tapi pengindeksan virtual adalah bukan pilihan terbaik untuk semua tingkat cache.Biaya berurusan dengan alias maya tumbuh dengan ukuran cache, dan sebagai hasilnya paling tingkat-2 dan lebih besar cache secara fisik diindeks.

Cache secara historis digunakan baik alamat virtual dan fisik untuk tag cache, meskipun penandaan virtual sekarang jarang. Jika pencarian TLB dapat selesai sebelum lookup RAM cache, maka alamat fisik tersedia dalam waktu untuk tag membandingkan, dan tidak ada kebutuhan untuk tag virtual. Cache besar, maka, cenderung secara fisik ditandai, dan hanya kecil, cache latency sangat rendah hampir ditandai. Dalam terakhir tujuan umum CPU, penandaan virtual telah digantikan oleh vhints, seperti dijelaskan dibawah.

Homonym and synonym problems

Cache yang mengandalkan pengindeksan virtual dan penandaan menjadi tidak konsisten setelah alamat virtual yang sama dipetakan ke alamat fisik yang berbeda (homonim). Hal ini dapat diselesaikan dengan menggunakan alamat fisik untuk tag ataudengan menyimpan id ruang alamat pada baris cache. Namun yang terakhir dari kedua pendekatan tidak membantu terhadap masalah sinonim, di mana beberapa baris cacheberakhir menyimpan data untuk alamat fisik yang sama. Menulis ke lokasi tersebut dapatupdate hanya satu lokasi di cache, meninggalkan orang lain dengan data yang tidak konsisten. Masalah ini mungkin diselesaikan dengan menggunakan layout yang tidaktumpang tindih memori untuk ruang alamat yang berbeda atau cache (atau bagian dari itu) harus memerah ketika perubahan pemetaan.

Virtual tags and vhints

Keuntungan besar dari tag virtual adalah bahwa, untuk cache asosiatif, mereka mengijinkan pertandingan tag untuk melanjutkan sebelum virtual untuk terjemahan fisik dilakukan. Namun,

  • koherensi probe dan penggusuran menyajikan sebuah alamat fisik untuk bertindak.Perangkat keras harus memiliki beberapa cara untuk mengubah alamat fisik ke indekscache, umumnya dengan menyimpan tag fisik serta tag virtual. Sebagai perbandingan, cache fisik tagged tidak perlu menjaga tag virtual, yang lebih sederhana.
  • Ketika sebuah virtual untuk pemetaan fisik akan dihapus dari TLB, cache entri denganalamat tersebut virtual akan harus memerah entah bagaimana. Atau, jika entri cachediperbolehkan pada halaman tidak dipetakan oleh TLB, maka entri-entri harus memerahketika hak akses pada halaman tersebut diubah dalam tabel halaman.

Hal ini juga mungkin bagi sistem operasi untuk memastikan bahwa tidak ada alias virtual secara bersamaan tinggal di cache. Sistem operasi membuat jaminan ini dengan menegakkan mewarnai halaman, yang dijelaskan di bawah ini. Beberapa prosesor RISC awal (SPARC, RS/6000) mengambil pendekatan ini. Ini tidak digunakan baru-baru ini, karena biaya hardware untuk mendeteksi dan mengusir alias virtual telah jatuh dan kompleksitas perangkat lunak dan denda kinerja mewarnai halaman sempurna telah meningkat.

Hal ini dapat berguna untuk membedakan kedua fungsi tag di cache asosiatif: mereka digunakan untuk menentukan cara masuknya diatur untuk memilih, dan mereka digunakan untuk menentukan apakah cache hit atau tidak terjawab. Fungsi kedua harus selalu benar, tetapi diperbolehkan bagi fungsi pertama untuk menebak, dan mendapatkan jawaban yang salah sesekali.

Beberapa prosesor (SPARC awal misalnya) memiliki cache dengan tag baik virtual dan fisik. Tag virtual yang digunakan untuk seleksi cara, dan tag fisik digunakan untuk menentukan hit atau miss. Jenis cache menikmati keuntungan latency cache hampir tag, dan antarmuka perangkat lunak sederhana cache secara fisik ditandai. Ini menanggung biaya tambahan tag digandakan, namun. Selain itu, selama rindu pengolahan, cara alternatif dari baris cache diindeks harus diperiksa untuk alias virtual dan setiap pertandingan digusur.

Area tambahan (dan latensi beberapa) dapat dikurangi dengan menjaga petunjuk virtual dengan setiap entri cache bukan tag virtual. Bantuan ini adalah subset atau hash dari tag virtual, dan digunakan untuk memilih jalan cache dari yang untuk mendapatkan data dan tag fisik. Seperti cache hampir tagged, mungkin menjadi pertandingan petunjuk virtual tetapi ketidakcocokan tag fisik, dalam hal entri cache dengan petunjuk yang sesuai harus diusir sehingga cache yang mengakses cache setelah mengisi di alamat ini hanya akan memiliki satu pertandingan petunjuk. Karena petunjuk maya memiliki bit kurang dari tag virtual yang membedakan mereka dari satu sama lain, cache hampir mengisyaratkan menderita konflik lebih merindukan dari cache hampir ditandai.

Mungkin pengurangan utama petunjuk virtual dapat ditemukan di Pentium 4 (Willamette dan Northwood core). Dalam prosesor petunjuk virtual efektif 2 bit, dan cache adalah 4-arah set asosiatif. Secara efektif, perangkat keras mempertahankan permutasi sederhana dari alamat virtual ke indeks cache, sehingga tidak ada memori konten-addressable (CAM) diperlukan untuk memilih yang tepat dari empat cara diambil.

Page coloring

Cache diindeks secara fisik besar (biasanya cache sekunder) mengalami masalah: sistem operasi daripada kontrol aplikasi halaman mana yang berbenturan dengan satu sama lain dalam cache. Perbedaan alokasi halaman dari satu run program untuk memimpin di samping perbedaan dalam pola Cache tabrakan, yang dapat menyebabkan perbedaan sangat besar dalam kinerja program. Perbedaan ini dapat membuatnya sangat sulit untuk mendapatkan waktu yang konsisten dan berulang untuk menjalankan benchmark.

Untuk memahami masalah, mempertimbangkan CPU dengan 1 MB fisik diindeks langsung dipetakan tingkat-2 cache dan 4 kB halaman memori virtual. Halaman fisik Sequential peta ke lokasi berurutan dalam cache sampai setelah 256 halaman pola membungkus. Kami dapat label setiap halaman fisik dengan warna 0-255 untuk menunjukkan di mana dalam cache itu bisa pergi. Lokasi di halaman fisik dengan warna yang berbeda tidak dapat bertentangan dalam cache.

Seorang programmer mencoba untuk memaksimalkan penggunaan cache dapat mengatur pola akses program nya sehingga hanya 1 MB data perlu di-cache pada waktu tertentu, sehingga menghindari meleset kapasitas. Tapi ia juga harus memastikan bahwa pola akses tidak meleset konflik. Salah satu cara untuk berpikir tentang masalah ini adalah untuk membagi halaman virtual penggunaan program dan menetapkan mereka warna virtual dalam cara yang sama seperti warna fisik ditugaskan untuk halaman fisik sebelumnya. Programmer dapat mengatur pola akses dari kode nya sehingga tidak ada dua halaman dengan warna virtual yang sama sedang digunakan pada saat yang sama. Ada banyak literatur yang luas pada optimasi tersebut (misalnya lingkaran optimasi sarang), sebagian besar berasal dari High Performance Computing (HPC) masyarakat.

Halangan adalah bahwa sementara semua halaman yang digunakan pada saat tertentu mungkin memiliki warna virtual yang berbeda, beberapa mungkin memiliki warna fisik yang sama. Bahkan, jika sistem operasi memberikan halaman fisik untuk halaman virtual secara acak dan merata, adalah sangat mungkin bahwa beberapa halaman akan memiliki warna fisik yang sama, dan kemudian lokasi dari halaman tersebut akan bertabrakan dalam cache (ini adalah paradoks ulang tahun).

Solusinya adalah memiliki usaha sistem operasi untuk menetapkan halaman yang berbeda warna fisik untuk warna virtual yang berbeda, teknik yang disebut pewarnaan halaman. Meskipun pemetaan aktual dari virtual untuk warna fisik tidak relevan dengan kinerja sistem, pemetaan aneh yang sulit untuk melacak dan memiliki sedikit manfaat, sehingga pendekatan yang paling untuk mewarnai halaman hanya mencoba untuk menjaga warna halaman fisik dan virtual sama.

Jika sistem operasi dapat menjamin bahwa setiap halaman peta fisik ke hanya satu warna virtual, maka tidak ada alias virtual, dan prosesor dapat menggunakan cache hampir diindeks dengan tidak perlu tambahan probe virtual alias selama penanganan miss. Atau, O / S dapat menyiram halaman dari cache setiap kali berubah dari satu warna virtual yang lain. Sebagaimana disebutkan di atas, pendekatan ini digunakan untuk beberapa SPARC awal dan RS/6000 desain.

Cache hierarchy in a modern processor

Prosesor modern memiliki cache berinteraksi beberapa pada chip.

Pengoperasian cache tertentu dapat sepenuhnya ditentukan oleh:

  • ukuran cache
  • ukuran cache blok
  • jumlah blok dalam satu set
  • set Cache pengganti kebijakan
  • write cache policy (write-through atau menulis-kembali)

Sementara semua blok cache dalam cache tertentu semua ukuran yang sama dan memiliki associativity sama, biasanya “tingkat rendah” cache (seperti cache L1) memiliki ukuran yang lebih kecil, memiliki blok yang lebih kecil, dan memiliki blok yang lebih sedikit dalam satu set , sementara “tingkat tinggi” cache (seperti cache L3) memiliki ukuran yang lebih besar, blok lebih besar, dan blok lagi di set.

Specialized caches

CPU access memory pipelined dari beberapa titik dalam pipa: instruksi fetch, virtual-ke-fisik terjemahan alamat, dan data fetch (lihat klasik pipa RISC). Desain alam adalah dengan menggunakan cache fisik yang berbeda untuk masing-masing poin, sehingga tidak ada sumber daya satu fisik harus dijadwalkan untuk melayani dua titik dalam pipa.Jadi pipa secara alami berakhir dengan setidaknya tiga cache terpisah (instruksi, BIS,dan data), masing-masing khusus untuk peran khususnya.

Pipa dengan cache instruksi dan data terpisah, sekarang dominan, yang dikatakan memiliki arsitektur Harvard. Awalnya, kalimat ini disebut mesin dengan instruksi yang terpisah dan kenangan data, yang terbukti sama sekali tidak populer. Kebanyakan CPUmodern memiliki satu memori arsitektur von Neumann.

Victim cache

Sebuah persediaan korban adalah cache digunakan untuk menyimpan blok diusir daricache CPU pada penggantian. Cache korban terletak di antara cache utama dan jalanisi ulang, dan hanya memegang blok yang diusir dari cache utama. Cache korbanbiasanya sepenuhnya asosiatif, dan dimaksudkan untuk mengurangi jumlah misseskonflik. Program yang umum digunakan banyak yang tidak memerlukan pemetaanasosiatif untuk semua akses. Bahkan, hanya sebagian kecil dari memori mengaksesprogram memerlukan associativity tinggi. Cache korban eksploitasi properti ini dengan menyediakan associativity tinggi hanya akses ini. Saat itu diperkenalkan oleh NormanJouppi dari DEC pada tahun 1990.

Trace cache

Salah satu contoh yang lebih ekstrim spesialisasi cache adalah cache jejak ditemukan dalam Intel Pentium 4 mikroprosesor. Sebuah persediaan jejak adalah mekanisme untuk meningkatkan instruksi fetch bandwidth dan mengurangi konsumsi daya (dalam kasus Pentium 4) dengan menyimpan jejak instruksi yang telah diambil dan decoded.

Paling awal dikenal luas publikasi akademik dari cache adalah jejak oleh Eric Rotenberg, Steve Bennett, dan Jim Smith pada tahun 1996 mereka kertas “Cache Trace:. Pendekatan Latency Rendah ke Mengambil Instruksi Bandwidth Tinggi”

Publikasi sebelumnya adalah US Paten 5381533, “aliran instruksi Dinamis cache memori diorganisir sekitar segmen jejak independen dari baris alamat virtual”, oleh Alex Peleg dan Uri Weiser dari Intel Corp, paten yang diajukan 30 Maret 1994, merupakan kelanjutan dari aplikasi yang diajukan di 1992, kemudian ditinggalkan.

Sebuah persediaan toko jejak instruksi baik setelah mereka telah diterjemahkan, atau karena mereka pensiun. Umumnya, instruksi yang ditambahkan untuk melacak cache dalam kelompok-kelompok yang mewakili baik blok dasar individu atau jejak instruksi dinamis. Sebuah jejak dinamis (“jejak jalan”) hanya berisi petunjuk yang hasilnya benar-benar digunakan, dan menghilangkan Instruksi berikut cabang diambil (karena mereka tidak dieksekusi); jejak dinamis dapat menjadi Rangkaian dari blok dasar ganda. Ini memungkinkan instruksi fetch unit prosesor untuk mengambil beberapa blok dasar, tanpa harus khawatir tentang cabang di aliran eksekusi.

Garis jejak disimpan di cache jejak berdasarkan program counter dari instruksi pertama dalam jejak dan satu set prediksi cabang. Hal ini memungkinkan untuk menyimpan jejak jalur berbeda yang dimulai pada alamat yang sama, masing-masing mewakili hasil cabang yang berbeda. Dalam instruksi fetch tahap pipa, program counter saat ini bersama dengan satu set prediksi cabang diperiksa di cache jejak untuk hit. Jika ada pukulan, garis jejak dipasok untuk mengambil yang tidak harus pergi ke cache biasa atau ke memori untuk petunjuk ini. Cache jejak terus memberi makan unit mengambil sampai ujung garis jejak atau sampai ada misprediction dalam pipa.Jika ada rindu, jejak baru mulai dibangun.

Cache jejak juga digunakan dalam prosesor seperti Intel Pentium 4 untuk menyimpan sudah diterjemahkan mikro-operasi, atau terjemahan dari instruksi x86 yang kompleks, sehingga pada saat instruksi tersebut diperlukan, tidak harus diterjemahkan lagi.

Multi-level caches

Masalah lainnya adalah tradeoff mendasar antara latency cache dan hit rate. Cache lebih besar telah lebih baik memukul tingkat tapi latency lebih lama. Untuk mengatasi tradeoff ini, banyak komputer yang menggunakan beberapa tingkat cache, dengan cache cepat kecil didukung oleh persediaan yang lebih lambat lebih besar.

Multi-level cache umumnya beroperasi dengan memeriksa tingkat terkecil 1 (L1) cache pertama, jika hits, hasil prosesor dengan kecepatan tinggi. Jika cache lebih kecil misses, cache yang lebih besar berikutnya (L2) dicentang, dan sebagainya, 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 1 sampai 64MB off-chip cache L3, sedangkan IBM Power4 (2001) memiliki 256 [rujukan?] MB L3 cache off-chip, dibagi di antara beberapa prosesor; Itanium 2 (2003) memiliki 6 MB terpadu tingkat 3 (L3) cache on-die; Itanium 2 (2003) MX 2 Modul menggabungkan dua Itanium2 prosesor bersama dengan cache 64 bersama L4 MB pada MCM yang pin yang kompatibel dengan prosesor Madison; Intel Xeon MP produk kode-bernama “Tulsa” (2006) memiliki 16 MB on-die cache L3 dibagi antara dua core prosesor, AMD Phenom II (2008) telah sampai dengan 6 MB pada-mati terpadu L3 cache, dan Intel Core i7 (2008) memiliki 8 MB on-die cache L3 terpadu yang inklusif, yang dimiliki oleh semua core. Manfaat dari L3 cache tergantung pada pola akses aplikasi.

Akhirnya, di ujung lain dari hirarki memori, CPU register file itu sendiri dapat dianggap cache terkecil, tercepat dalam sistem, dengan karakteristik khusus yang dijadwalkan dalam perangkat lunak-biasanya oleh compiler, karena itu mengalokasikan register untuk menahan nilai diambil dari memori utama. (. Lihat optimasi sarang terutama loop) Daftar file kadang-kadang juga memiliki hirarki: The Cray-1 (sekitar tahun 1976) memiliki 8 alamat “A” dan data skalar 8 “S” register yang umumnya digunakan. Ada juga satu set dari 64 alamat “B” dan data skalar 64 “T” register yang membutuhkan waktu lebih lama untuk mengakses, tetapi lebih cepat dari memori utama. “B” dan “T” register diberikan karena Cray-1 tidak memiliki data cache. (The Cray-1 itu, bagaimanapun, memiliki cache instruksi.)

Multi-core chips

Ketika mempertimbangkan sebuah chip dengan beberapa core, ada pertanyaan apakah cache harus dibagi atau lokal untuk masing-masing inti. Menerapkan shared cache diragukan lagi memperkenalkan kabel lebih dan kompleksitas. Tapi kemudian, memiliki satu cache per keping, bukan inti, sangat mengurangi jumlah ruang yang dibutuhkan, dan dengan demikian orang dapat mencakup cache yang lebih besar.Biasanya orang menemukan bahwa berbagi L1 cache tidak diinginkan karenapeningkatan latensi adalah sedemikian rupa sehingga setiap core akan berjalan jauhlebih lambat dari chip single-core. Tapi kemudian, untuk tingkat tertinggi (yang terakhirdisebut sebelum mengakses memori), memiliki cache global diinginkan karena beberapa alasan. Sebagai contoh, sebuah chip delapan inti dengan tiga tingkat mungkin termasuk cache L1 untuk setiap core, cache L3 yang dimiliki oleh semua core, denganL2 cache antara, misalnya, satu untuk setiap pasang core.

Exclusive versus inclusive

Multi-level cache memperkenalkan keputusan desain baru. Misalnya, di beberapa prosesor, semua data di cache L1 juga harus berada di suatu tempat di cache L2.Persediaan ini disebut ketat inklusif. Prosesor lainnya (seperti AMD Athlon) memiliki cache eksklusif – data yang dijamin berada di paling banyak satu dari cache L1 dan L2, tidak pernah baik. Prosesor masih lain (seperti Intel Pentium II, III, dan 4), tidak memerlukan bahwa data di cache L1 juga berada di L2 cache, meskipun mungkin sering melakukannya. Tidak ada nama yang diterima secara universal untuk kebijakan menengah.

Keuntungan dari cache eksklusif adalah bahwa mereka menyimpan lebih banyak data.Keuntungan ini lebih besar ketika L1 cache eksklusif sebanding dengan L2 cache, dan berkurang jika cache L2 adalah berkali-kali lebih besar dari L1 cache. Ketika L1 L2 meleset dan menyentuh pada akses suatu, baris cache yang memukul di L2 dipertukarkan dengan garis di L1. Pertukaran ini adalah pekerjaan sedikit lebih dari sekedar menyalin baris dari L2 ke L1, yang adalah apa cache inklusif tidak.

Satu keuntungan dari cache ketat inklusif adalah bahwa ketika perangkat eksternal atau prosesor lainnya dalam sistem multiprosesor ingin menghapus baris cache dari prosesor, mereka hanya perlu memiliki prosesor memeriksa L2 cache. Dalam hirarki cache yang tidak menegakkan inklusi, cache L1 harus diperiksa juga. Sebagai kekurangan, ada hubungan antara associativities cache L1 dan L2: jika L2 cache tidak memiliki minimal sebagai cara sebanyak semua cache L1 bersama-sama, associativity efektif dari cache L1 dibatasi. Kelemahan lain dari cache inklusif adalah bahwa setiap kali ada penggusuran di L2 cache, yang (mungkin) baris-baris di L1 juga harus mendapatkan digusur untuk mempertahankan inklusivitas. Ini merupakan pekerjaan sedikit, dan akan menghasilkan lebih tinggi tingkat L1 miss.

Keuntungan lain dari cache inklusif adalah bahwa cache yang lebih besar dapat menggunakan baris cache yang lebih besar, yang mengurangi ukuran dari tag cache sekunder. (Cache eksklusif mengharuskan kedua cache memiliki garis-garis ukuran cache yang sama, sehingga baris cache dapat ditukarkan pada miss L1, L2 hit). Jika cache sekunder adalah urutan besarnya lebih besar dari primer, dan data cache adalah urutan besarnya lebih besar dari tag cache, daerah ini tag disimpan dapat dibandingkan dengan daerah tambahan yang diperlukan untuk menyimpan data L1 cache L2 di .

Example: the K8

Untuk menggambarkan kedua spesialisasi dan multi-level caching, di sini adalah hirarkicache dari inti K8 dalam CPU AMD Athlon 64.

Para K8 memiliki 4 khusus cache: cache instruksi, sebuah TLB instruksi, sebuah TLB data, dan data cache. Masing-masing cache adalah khusus:

  • Cache instruksi menyimpan salinan dari 64-byte baris memori, dan mengambil 16 byte setiap siklus. Setiap byte dalam cache ini disimpan dalam sepuluh bit, bukan 8, dengan bit ekstra menandai batas-batas instruksi (ini adalah contoh dari predecoding). Cache memiliki perlindungan paritas hanya bukan ECC, karena paritas lebih kecil dan data yang rusak dapat diganti dengan data baru diambil dari memori (yang selalu memiliki salinan up-to-date instruksi).
  • Para TLB instruksi menyimpan salinan dari entri tabel halaman (PTEs). Instruksi setiap siklus yang mengambil memiliki alamat virtual diterjemahkan melalui BIS ini menjadi sebuah alamat fisik. Setiap entri adalah baik 4 atau 8 byte di memori. Karena K8 memiliki ukuran halaman variabel, masing-masing TLBs dibagi menjadi dua bagian, satu untuk menjaga PTEs bahwa peta 4 kB halaman, dan satu untuk menjaga PTEs bahwa peta 4 MB atau 2 MB halaman. Perpecahan memungkinkan sirkuit pertandingan sepenuhnya asosiatif di setiap bagian untuk menjadi lebih sederhana. Sistem operasi memetakan bagian yang berbeda dari ruang alamat virtual dengan PTEs ukuran yang berbeda.
  • Para TLB data memiliki dua salinan yang menyimpan entri identik. Dua salinan memungkinkan dua data per siklus mengakses untuk menerjemahkan alamat virtual ke alamat fisik. Seperti TLB instruksi, TLB ini dibagi menjadi dua jenis entri.
  • Data cache menyimpan salinan dari 64-byte baris memori. Hal ini dibagi menjadi 8 bank (setiap 8 kB menyimpan data), dan dapat mengambil dua 8-byte data setiap siklus selama data tersebut berada di bank yang berbeda. Ada dua salinan dari tag, karena setiap baris 64-byte tersebar di antara semua 8 bank. Setiap salinan tag menangani salah satu dari dua akses per siklus.

Para K8 juga memiliki beberapa tingkat cache. Ada tingkat kedua instruksi dan data TLBs, yang menyimpan hanya PTEs pemetaan 4 kB. Kedua instruksi dan data cache, dan TLBs berbagai, dapat mengisi dari cache L2 besar bersatu. Cache ini adalah eksklusif untuk kedua instruksi dan data cache L1, yang berarti bahwa setiap baris 8-byte hanya bisa berada di salah satu cache instruksi L1, L1 data cache, atau cache L2.Namun demikian, mungkin untuk baris dalam data cache memiliki PTE yang juga di salah satu TLBs-sistem operasi bertanggung jawab untuk menjaga TLBs koheren dengan menyiram bagian-bagian dari mereka ketika tabel halaman dalam memori diperbarui.

Para K8 juga cache informasi yang pernah disimpan dalam memori-prediksi informasi.Cache ini tidak ditampilkan dalam diagram di atas. Seperti biasa untuk kelas CPU, K8 memiliki prediksi cabang yang cukup kompleks, dengan meja yang membantu memprediksi apakah cabang diambil dan tabel lain yang memprediksi target cabang dan melompat. Beberapa informasi ini berkaitan dengan instruksi, baik cache level 1 dan cache instruksi sekunder bersatu.

K8 menggunakan trik yang menarik untuk menyimpan informasi prediksi dengan instruksi dalam cache sekunder. Baris dalam cache sekunder dilindungi dari korupsi data disengaja (misalnya dengan serangan partikel alfa) dengan baik ECC atau paritas, tergantung pada apakah garis itu diusir dari data atau cache instruksi utama.Karena kode paritas membutuhkan lebih sedikit bit dari kode ECC, baris dari cache instruksi memiliki bit cadang beberapa. Bit-bit yang digunakan untuk cache cabang informasi prediksi yang terkait dengan instruksi tersebut. Hasil akhirnya adalah bahwa prediktor cabang memiliki tabel sejarah yang lebih besar yang efektif, dan memiliki akurasi yang lebih baik.

More hierarchies

Prosesor lain memiliki jenis lain dari prediktor (misalnya prediktor toko-untuk-loadpintas dalam DEC Alpha 21264), dan prediktor khusus berbagai kemungkinanberkembang di prosesor masa depan.

Ini adalah prediktor cache dalam bahwa mereka menyimpan informasi yang mahaluntuk menghitung. Beberapa istilah yang digunakan ketika membahas prediksi adalahsama dengan cache (satu berbicara tentang menjadi hit di prediktor cabang), tetapiprediktor umumnya tidak dianggap sebagai bagian dari hirarki cache.

Para K8 menyimpan instruksi dan data cache koheren dalam perangkat keras, yang berarti bahwa toko ke sebuah instruksi erat mengikuti instruksi toko akan mengubah ituinstruksi berikut. Prosesor lainnya, seperti di Alfa dan keluarga MIPS, telah mengandalkan pada perangkat lunak untuk menjaga cache instruksi yang koheren.Toko tidak dijamin muncul dalam instruksi streaming sampai sebuah programpanggilan fasilitas sistem operasi untuk memastikan koherensi.

Implementation

Cache membaca adalah operasi CPU yang paling umum yang memakan waktu lebih dari satu siklus. Program waktu eksekusi cenderung sangat sensitif terhadap latency hit level-1 cache data. Banyak usaha desain, dan sering kekuasaan dan daerah silikon yang dikeluarkan membuat cache secepat mungkin.

Cache yang paling sederhana adalah cache langsung dipetakan hampir diindeks.Alamat virtual dihitung dengan seorang penambah, bagian yang relevan dari alamat diekstraksi dan digunakan untuk indeks SRAM, yang mengembalikan data yang dimuat. Data adalah byte selaras dalam shifter byte, dan dari sana dilewati untuk operasi berikutnya. Tidak perlu untuk setiap tag check in loop batin – sebenarnya, tag perlu bahkan tidak dibaca. Kemudian di 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 diminta dan pipa di-restart.

Cache asosiatif lebih rumit, karena beberapa bentuk tag harus dibaca untuk menentukan masuknya cache untuk memilih. N-cara set-associative level-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 yang pertama, sehingga hanya satu elemen data dibaca dari SRAM data.

Diagram ke kanan dimaksudkan untuk menjelaskan cara di mana berbagai bidang alamat yang digunakan. Alamat bit 31 adalah yang paling signifikan, 0 bit paling signifikan. Gambar berikut ini menunjukkan SRAMs, pengindeksan, dan multiplexing untuk 4 kB, 2-way set-associative, hampir diindeks dan hampir tagged cache dengan 64 baris B, lebar membaca 32b dan 32b alamat virtual.

Karena cache adalah 4 kB dan memiliki 64 jalur B, hanya ada 64 baris dalam cache, dan kita membaca dua waktu dari SRAM Tag yang memiliki 32 baris, masing-masing dengan sepasang 21 tag bit. Meskipun setiap fungsi dari bit alamat virtual 31 sampai 6 dapat digunakan untuk indeks SRAMs tag dan data, sangat sederhana untuk menggunakan bit paling signifikan.

Demikian pula, karena cache adalah 4 kB dan memiliki jalur baca 4 B, dan membaca dua cara untuk akses masing-masing, SRAM Data 512 baris dengan 8 byte lebar.

Sebuah persediaan yang lebih modern mungkin 16 kB, 4-arah set-associative, hampir diindeks, hampir mengisyaratkan, dan secara fisik ditandai, dengan 32 jalur B, 32b membaca lebar dan alamat fisik 36b. Terulangnya jalan membaca untuk seperti cache terlihat sangat mirip dengan jalan di atas. Daripada tag, vhints dibaca, dan dicocokkan dengan subset dari alamat virtual. Kemudian di 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 penundaan beberapa gerbang dengan runtuh penambah alamat virtual ke dalam decoder SRAM. Lihat decoder Sum ditangani.

History

Sejarah awal teknologi cache yang terkait erat dengan penemuan dan penggunaanmemori virtual [kutipan diperlukan]. Karena kenangan kelangkaan dan biaya semi-konduktor, komputer mainframe di awal 1960-an menggunakan hirarki kompleks dari memori fisik, dipetakan ke datar ruang memori virtual yang digunakan oleh program.Teknologi memori akan span semi-konduktor, inti magnetik, drum dan disk. Virtual memory dilihat dan digunakan oleh program akan menjadi datar dan cache akan digunakan untuk mengambil data dan instruksi ke dalam memori tercepat di depanakses prosesor. Penelitian ekstensif dilakukan untuk mengoptimalkan ukuran cache.Nilai optimal yang ditemukan sangat tergantung pada bahasa pemrograman yang digunakan dengan Algol perlu yang terkecil dan Fortran dan Cobol membutuhkanukuran cache terbesar [disengketakan – mendiskusikan].

Pada hari-hari awal teknologi komputer mikro, akses memori hanya sedikit lebih lambat dari akses mendaftar. Tapi sejak 1980-an kesenjangan kinerja antara prosesor dan memori telah berkembang. Mikroprosesor telah maju jauh lebih cepat dari memori,terutama dalam hal frekuensi operasi mereka, sehingga memori menjadi hambatan kinerja. Meskipun secara teknis mungkin untuk memiliki semua memori utama secepatCPU, jalur yang lebih ekonomis telah diambil: banyak penggunaan kecepatan rendahmemori, tetapi juga memperkenalkan memori cache berkecepatan tinggi kecil untukmengurangi kesenjangan kinerja. Ini memberikan urutan besarnya lebih kapasitas untuk hal yang sama harga dengan hanya kinerja gabungan sedikit berkurang.

First TLB implementations

Penggunaan didokumentasikan pertama TLB satu berada di 645and GE IBM 360/67, yang keduanya menggunakan memori asosiatif sebagai sebuah TLB.

First data cache

Penggunaan didokumentasikan pertama dari data cache adalah pada Model IBM System/360 85.

In x86 microprocessors

Sebagai mikroprosesor x86 mencapai tingkat clock 20 MHz dan di atas di 386, sejumlah kecil memori cache cepat mulai ditampilkan dalam sistem untuk meningkatkan kinerja. Ini karena DRAM digunakan untuk memori utama memiliki latensi yang signifikan, hingga 120 ns, serta siklus refresh. Cache dibangun dari lebih mahal, tetapi secara signifikan lebih cepat, SRAM, yang pada saat itu memiliki latency sekitar 10 ns. Cache awal adalah eksternal untuk prosesor dan biasanya terletak pada motherboard dalam bentuk delapan atau sembilan perangkat DIP ditempatkan di soket untuk mengaktifkan cache sebagai fitur tambahan atau upgrade opsional.

Beberapa versi dari prosesor Intel 386 dapat mendukung 16-64 kB cache eksternal.

Dengan prosesor 486, sebuah 8 kB cache yang terintegrasi langsung ke CPU mati.Cache ini disebut Tingkat 1 atau L1 cache untuk membedakannya dari semakin lambat di motherboard, atau Level 2 (L2) cache. Ini di motherboard cache jauh lebih besar, dengan ukuran paling umum adalah 256 kB. Popularitas di motherboard Cache berlanjut saat era Pentium MMX tetapi dibuat usang oleh pengenalan SDRAM dan perbedaan pertumbuhan antara tingkat bus clock dan tingkat clock CPU, yang menyebabkan di-cache untuk motherboard hanya sedikit lebih cepat dari memori utama .

Evolusi berikutnya dalam implementasi cache pada mikroprosesor x86 dimulai dengan Pentium Pro, yang membawa cache sekunder ke paket yang sama sebagai mikroprosesor, clock frekuensi yang sama seperti mikroprosesor.

Pada motherboard-cache menikmati berkat popularitas yang terlalu lama untuk AMD K6-2 dan K6-III prosesor AMD yang masih menggunakan Socket 7 terhormat, yang sebelumnya digunakan oleh Intel dengan motherboard on-cache. K6-III termasuk 256 kb on die L2 cache dan mengambil keuntungan dari cache on-board sebagai cache tingkat ketiga, bernama L3 (motherboard dengan sampai 2 MB on-board cache yang diproduksi). Setelah Socket-7 menjadi usang, pada motherboard-cache yang menghilang dari sistem x86.

Cache tiga tingkat digunakan lagi pertama dengan pengenalan core prosesor ganda, dimana L3 ditambahkan ke CPU mati. Ini menjadi umum untuk memiliki tiga tingkat lebih besar dalam ukuran dari depan sehingga menjadi tidak jarang menemukan ukuran Tingkat Cache 3 dari delapan megabyte. Kecenderungan ini tampaknya berlanjut di masa mendatang.

Current research

Desain Cache awal berfokus sepenuhnya pada biaya langsung dari cache dan RAM dan kecepatan eksekusi rata-rata. Desain Cache yang lebih baru juga mempertimbangkan efisiensi energi, toleransi kesalahan, dan tujuan lainnya.

Ada beberapa utilitas yang tersedia untuk arsitek komputer untuk membantu menjelajahitimbal balik antara waktu cache siklus, energi, dan area. Alat-alat ini termasuk open source cacti simulator cache dan open-source SimpleScalar simulator set instruksi.

Multi-ported cache

Sebuah persediaan multi-porting adalah cache yang dapat melayani lebih dari satu permintaan pada suatu waktu. Ketika mengakses cache tradisional biasanya kitamenggunakan alamat memori tunggal, sedangkan dalam cache multi-porting kita dapat meminta alamat N pada suatu waktu – dimana N adalah jumlah port yang terhubung melalui prosesor dan cache. Keuntungan dari ini adalah bahwa prosesor pipelineddapat mengakses memori dari fase yang berbeda yang dalam proses. Manfaat lain adalah bahwa hal itu memungkinkan konsep super-skalar prosesor melalui tingkat cache yang berbeda.

Artikel Terkait

2 Responses to Cache Memory

  1. Ping-balik: Memori komputer « repsolhondahrc

  2. Ping-balik: 201281054 – Ferry Harjanto » TUGAS AKTIVITAS ONLINE CACHE MEMORY

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: