Sangat mungkin untuk memahami dan mengoptimalkan cache. Dimulai dengan memahami perangkat keras dan berlanjut dengan mengendalikan sistem. Semakin sedikit kendali yang Anda miliki atas sistem, semakin kecil kemungkinan Anda untuk berhasil. Linux atau Windows menjalankan banyak aplikasi / utas yang tidak idle.
Kebanyakan cache agak mirip dalam propertinya, gunakan beberapa bagian bidang alamat untuk mencari klik, memiliki kedalaman (cara), dan lebar (garis cache). Beberapa memiliki buffer tulis, beberapa dapat dikonfigurasi untuk menulis melalui atau mem-bypass cache pada write, dll.
Anda harus benar-benar menyadari semua transaksi memori yang terjadi yang mengenai cache itu (beberapa sistem memiliki instruksi independen dan cache data yang membuat tugas lebih mudah).
Anda dapat dengan mudah membuat cache tidak berguna dengan tidak mengatur memori Anda dengan hati-hati. Misalnya, jika Anda memiliki beberapa blok data yang sedang Anda proses, berharap untuk menyimpannya dalam cache, tetapi mereka berada dalam memori di alamat yang bahkan berlipatganda relatif terhadap pengecekan hit / miss cache, katakan 0x10000 0x20000 0x30000, dan Anda memiliki lebih dari ini daripada cara-cara dalam cache, Anda mungkin sangat cepat membuat sesuatu yang berjalan cukup lambat dengan cache aktif, lebih lambat daripada dengan cache dimatikan. Tapi ubah itu menjadi 0x10000, 0x21000, 0x32000 dan itu mungkin cukup untuk mengambil keuntungan penuh dari cache, mengurangi penggusuran.
Intinya, kunci untuk mengoptimalkan cache (well, selain mengetahui sistem dengan cukup baik) adalah untuk menjaga semua hal yang Anda butuhkan untuk kinerja dalam cache pada saat yang sama, mengatur data sedemikian rupa sehingga mungkin untuk memiliki semuanya ada dalam cache sekaligus. Dan mencegah hal-hal seperti eksekusi kode, menyela, dan peristiwa reguler atau acak lainnya mengusir bagian penting dari data ini yang Anda gunakan.
Hal yang sama berlaku untuk kode. Ini sedikit lebih sulit karena Anda perlu mengontrol lokasi tempat kode hidup untuk menghindari tabrakan dengan kode lain yang ingin Anda simpan dalam cache. Saat menguji / membuat profil kode apa pun yang melewati cache yang menambahkan satu baris kode di sana-sini atau bahkan satu nomor, apa pun yang menggeser atau mengubah alamat tempat kode itu hidup dari satu kompilasi ke kompilasi lain untuk kode yang sama, mengubah di mana garis cache termasuk dalam kode itu dan mengubah apa yang diusir dan apa yang tidak untuk bagian kritis.