Kapan cache CPU kembali ke memori utama?

18

Jika saya memiliki CPU dengan dua core, masing-masing core memiliki cache L1 sendiri, mungkinkah Core1 dan Core2 cache bagian memori yang sama pada saat yang sama?
Jika memungkinkan, berapa nilai memori utama nantinya jika Core1 dan Core2 telah mengedit nilainya dalam cache?

CarmeloS
sumber

Jawaban:

26

Jika saya memiliki CPU dengan dua core, masing-masing core memiliki cache L1 sendiri, mungkinkah Core1 dan Core2 cache bagian memori yang sama pada saat yang sama?

Iya. Performa akan mengerikan jika ini tidak terjadi. Pertimbangkan dua utas yang menjalankan kode yang sama. Anda ingin kode itu di kedua cache L1.

Jika memungkinkan, berapakah nilai memori utama jika Core1 dan Core2 telah mengedit nilainya dalam cache?

Nilai lama akan berada di memori utama, yang tidak masalah karena CPU tidak akan membacanya. Sebelum mengeluarkan nilai yang dimodifikasi dari cache, itu harus ditulis ke memori. Biasanya beberapa varian protokol MESI digunakan. Dalam implementasi MESI tradisional, jika suatu nilai diubah dalam satu cache, itu tidak bisa hadir sama sekali dalam cache lain di tingkat yang sama.

David Schwartz
sumber
15

Ya, ini (memiliki dua cache cache wilayah memori yang sama) dapat terjadi, sebenarnya ini adalah masalah yang sering terjadi dalam praktik. Ada berbagai solusi, misalnya:

  • kedua cache dapat berkomunikasi untuk memastikan mereka tidak setuju
  • Anda dapat memiliki semacam pengawas yang memonitor semua cache dan memperbarui mereka sesuai
  • setiap prosesor memantau area memori yang telah di-cache, dan ketika mendeteksi sebuah penulisan, ia membuang cache-nya (sekarang tidak valid)

Masalahnya disebut koherensi cache . The artikel Wikipedia pada topik memiliki gambaran yang baik dari masalah dan solusi yang mungkin.

sleske
sumber
2

Untuk menjawab pertanyaan dalam judul Anda, itu tergantung pada apa protokol caching itu. Jika ini adalah write-back, cache hanya akan dibilas kembali ke memori utama ketika controller cache tidak punya pilihan selain untuk menempatkan blok cache baru di ruang yang sudah ditempati. Blok yang sebelumnya ditempati ruang dihapus dan nilainya ditulis kembali ke memori utama.

Protokol lain adalah write-through. Dalam hal ini, kapan saja blok cache ditulis pada level n, blok yang sesuai pada level (n +1) diperbarui. (Ini serupa dalam konsep untuk mengisi formulir kami dengan kertas karbon di bawahnya; apa pun yang Anda tulis di atas disalin pada lembar di bawah ini.) Ini lebih lambat karena jelas melibatkan lebih banyak operasi penulisan, tetapi nilai di antara cache lebih konsisten. Dalam skema tulis-kembali, hanya cache level tertinggi yang memiliki nilai paling baru untuk blok memori tertentu.

Kimberly W
sumber
1
Saya ingin tahu berapa persen pembaca di sini yang pernah menggunakan kertas karbon. :)
Barmar