# Tembolok CPU

**Tembolok CPU** (bahasa Inggris: CPU cache) adalah tembolok yang digunakan oleh unit pengolah pusat dari sebuah komputer untuk mengurangi waktu rata-rata untuk mengakses memori. Tembolok adalah memori yang lebih kecil, memori yang lebih cepat menyimpan salinan data dari lokasi yang paling sering digunakan memori utama. Selama mengakses memori sebagian besar adalah lokasi memori tembolok, latensi rata-rata mengakses memori cenderung mendekati latensi tembolok daripada latensi dari memori utama.

## Tinjauan

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

Desktop termodern dan server CPU memiliki setidaknya tiga tembolok independen: sebuah tembolok instruksi untuk mempercepat eksekusi instruksi mengambil, sebuah tembolok data untuk mempercepat data mengambil dan menyimpan, dan translation lookaside buffer (TLB) yang digunakan untuk mempercepat virtual-to-physical alamat terjemahan untuk kedua instruksi eksekusi dan data. Tembolok data biasanya diatur sebagai sebuah hierarki aras tembolok lebih (L1, L2, dll, lihat Multi-level cache).

### Entri tembolok

Data ditransfer antara memori dan tembolok di blok ukuran tetap, disebut garis tembolok. Ketika sebuah baris tembolok akan disalin dari memori ke tembolok, entri tembolok dibuat. Masuknya tembolok akan mencakup data yang disalin serta lokasi memori yang diminta (sekarang disebut tag).

Ketika prosesor perlu membaca atau menulis sebuah lokasi di memori utama, pertama mengecek entri yang sesuai dalam tembolok. Tembolok memeriksa isi dari lokasi memori yang diminta dalam setiap baris tembolok yang mungkin mengandung alamat tersebut. Jika prosesor menemukan bahwa lokasi memori berada di dalam tembolok, *cache hit* telah terjadi (jika tidak, *cache miss*).

* Pada kasus *cache hit*, prosesor langsung membaca atau menulis data dalam baris tembolok.
* Pada kasus *cache miss*, tembolok mengalokasikan sebuah entri baru, dan salinan data dari memori utama. Kemudian, permintaan tersebut dipenuhi dari isi tembolok.

## Kinerja tembolok

Proporsi akses yang menghasilkan hit tembolok dikenal sebagai hit rate, dan dapat menjadi ukuran efektivitas dari tembolok untuk program tertentu atau algoritme.

Baca misses eksekusi tertunda karena mereka membutuhkan data yang akan ditransfer dari memori jauh lebih lambat dari tembolok itu sendiri. Menulis misses dapat terjadi tanpa penalti seperti itu, karena prosesor dapat melanjutkan eksekusi sedangkan data akan disalin ke memori utama di latar belakang.

tembolok instruksi mirip dengan tembolok data, tapi CPU hanya melakukan akses membaca (instruksi mengambil) untuk instruksi tembolok. (Dengan Harvard-arsitektur CPU, instruksi dan data tembolok dapat dipisahkan untuk kinerja yang lebih tinggi, tetapi mereka juga dapat dikombinasikan untuk mengurangi overhead perangkat keras.)

### Kebijakan penggantian

Untuk membuat ruang untuk entri baru pada miss cache, tembolok mungkin harus menggusur salah satu entri yang ada. Heuristik yang menggunakan untuk memilih entri untuk menggusur disebut kebijakan penggantian. Masalah mendasar dengan semua kebijakan penggantian adalah bahwa ia harus memprediksi entri tembolok yang ada paling tidak mungkin untuk digunakan pada masa depan. Memprediksi masa depan adalah sulit, sehingga tidak ada cara sempurna untuk memilih di antara berbagai kebijakan pengganti yang tersedia.

Satu pengganti kebijakan yang populer, paling-terakhir digunakan (LRU), menggantikan entri paling tidak yang baru diakses.

Menandai beberapa rentang memori sebagai non-dapatditembolokkan dapat meningkatkan kinerja, dengan menghindari penembolokan daerah memori yang jarang diakses ulang. Hal ini untuk menghindari overhead pemuatan sesuatu ke dalam tembolok, tanpa harus penggunaan kembali apapun.

Entri tembolok juga dapat dinonaktifkan atau dikunci sesuai pada konteks.

### Kebijakan penulisan

Jika data ditulis ke tembolok, di beberapa titik juga harus ditulis ke memori utama. Waktu menulis ini dikenal sebagai kebijakan penulisan.

* Dalam sebuah *write-through cache*, setiap penulisan ke tembolok menyebabkan penulisan ke memori utama.
* Atau, dalam *write-back* atau *copy-back cache*, penulisan tidak langsung tecermin ke memori utama. Sebaliknya, jalur tembolok yang lokasinya telah ditulis lebih (lokasi tersebut ditandai kotor). Data di lokasi tersebut ditulis kembali ke memori utama hanya ketika data yang digusur dari tembolok.. Untuk alasan ini, sebuah miss dalam cache write-back kadang-kadang mungkin memerlukan akses memori dua layanan: satu untuk pertama menulis lokasi kotor ke memori dan lainnya untuk membaca lokasi baru dari memori.

Ada juga kebijakan menengah. Tembolok mungkin menulis-melalui, tetapi penulisan dapat diadakan dalam suatu antrean penyimpanan data sementara, biasanya sehingga beberapa penyimpan dapat diproses bersama-sama (yang dapat mengurangi perputaran bus dan meningkatkan pemanfaatan bus).

Data dalam memori utama sedang ditembolokkan dapat diubah oleh entitas lain (misalnya periferal menggunakan akses memori langsung atau multi-core prosesor), dalam kasus salinan tersimpan di tembolok dapat menjadi out-of-date atau basi. Atau, ketika CPU dalam multi-core prosesor update data dalam tembolok, salinan data di tembolok yang terkait dengan core lain akan menjadi basi. Komunikasi protokol antara manajer tembolok yang menyimpan data yang konsisten dikenal sebagai protokol koherensi tembolok.

### Stal CPU

Waktu yang dibutuhkan untuk mengambil satu baris tembolok dari memori (baca latensi) penting karena CPU akan kehabisan hal yang harus dilakukan saat menunggu baris tembolok. Ketika CPU mencapai keadaan ini, hal itu disebut warung.

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

Out-of-order CPU (Pentium Pro dan kemudian desain Intel, stal upaya untuk mengeksekusi 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 sebuah benang alternatif untuk menggunakan core CPU sementara thread pertama menunggu data yang berasal dari memori utama .