Jika Anda baru mulai belajar bagaimana CPU multi-core, caching, cache coherency, dan memori bekerja, mungkin tampak sedikit membingungkan pada awalnya. Dengan itu dalam pikiran, SuperUser Q & A posting hari ini memiliki jawaban atas pertanyaan pembaca yang penasaran.
Sesi Tanya & Jawab hari ini hadir untuk memberi kami hak milik SuperUser-sub divisi Stack Exchange, pengelompokan situs web Q & A berbasis komunitas.
Pembaca SuperUser CarmeloS ingin tahu kapan cache CPU disiram kembali ke memori utama:
Jika saya memiliki CPU dengan dua inti dan masing-masing inti memiliki cache L1 sendiri, apakah mungkin Core1 dan Core2 keduanya menyimpan bagian memori yang sama pada saat yang bersamaan? Jika mungkin, apa yang akan menjadi nilai memori utama jika kedua Core1 dan Core2 telah mengedit nilainya dalam cache?
Kapan cache CPU memerah kembali ke memori utama?
Kontributor SuperUser David Schwartz, sleske, dan Kimberly W memiliki jawabannya untuk kami. Pertama, David Schwartz:
Jika saya memiliki CPU dengan dua inti dan masing-masing inti memiliki cache L1 sendiri, apakah mungkin Core1 dan Core2 keduanya menyimpan bagian memori yang sama pada saat yang bersamaan?
Ya, kinerja akan sangat buruk jika ini tidak terjadi. Pertimbangkan dua utas yang menjalankan kode yang sama. Anda ingin kode itu di kedua cache L1.
Jika mungkin, apa yang akan menjadi nilai memori utama jika kedua Core1 dan Core2 telah mengedit nilainya dalam cache?
Nilai lama akan berada di memori utama, yang tidak akan berpengaruh karena inti tidak akan membacanya. Sebelum mengeluarkan nilai modifikasi dari cache, harus ditulis ke memori. Biasanya, beberapa varian dari protokol MESI digunakan. Dalam implementasi tradisional MESI, jika nilai diubah dalam satu cache, itu tidak dapat hadir sama sekali di cache lain pada tingkat yang sama.
Diikuti oleh jawaban dari sleske:
Ya, memiliki dua cache cache wilayah memori yang sama dapat terjadi dan sebenarnya masalah yang banyak terjadi dalam praktek. Ada berbagai solusi, misalnya:
- Kedua cache dapat berkomunikasi untuk memastikan mereka tidak setuju
- Anda dapat memiliki semacam pengawas yang memonitor semua cache dan memperbaruinya sesuai
- Setiap prosesor memantau area memori yang telah di-cache, dan ketika mendeteksi suatu tulisan, ia mengeluarkan cache (sekarang tidak valid)
Masalahnya disebut koherensi cache dan artikel Wikipedia pada topik memiliki gambaran yang bagus tentang masalah dan kemungkinan solusinya.
Dan jawaban akhir kami dari Kimberly W:
Untuk menjawab pertanyaan dalam judul posting Anda, itu tergantung pada apa protokol caching. Jika itu adalah write-back, cache hanya akan memerah kembali ke memori utama ketika pengontrol cache tidak punya pilihan selain meletakkan blok cache baru di ruang yang sudah ditempati. Blok yang sebelumnya menempati ruang dihapus dan nilainya ditulis kembali ke memori utama.
Protokol lainnya adalah write-through. Dalam hal ini, kapan pun blok cache ditulis pada level n, blok yang sesuai pada level n +1 diperbarui. Ini mirip dalam konsep untuk mengisi formulir dengan kertas karbon di bawahnya; apa pun yang Anda tulis di atas disalin pada lembaran di bawah ini. Ini lebih lambat karena jelas melibatkan lebih banyak operasi penulisan, tetapi nilai antara cache lebih konsisten. Dalam skema write-back, hanya cache level tertinggi yang memiliki nilai paling up-to-date untuk blok memori tertentu.
Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.
Kredit Gambar: Lemsipmatt (Flickr)