Beranda » bagaimana » Kapan Cache CPU Kembali ke Memori Utama?

    Kapan Cache CPU Kembali ke Memori Utama?

    Jika Anda baru mulai mempelajari cara kerja multi-core CPU, caching, cache coherency, dan memory, mungkin akan sedikit membingungkan pada awalnya. Dengan mengingat hal itu, pos T&J SuperUser hari ini memiliki jawaban untuk pertanyaan pembaca yang penasaran.

    Sesi Tanya Jawab hari ini datang kepada kami berkat SuperUser-subdivisi Stack Exchange, pengelompokan situs web Q&A berbasis komunitas.

    Pertanyaan

    Pembaca SuperUser, CarmeloS ingin tahu kapan cache CPU dihapus kembali ke memori utama:

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

    Kapan cache CPU kembali ke memori utama?

    Jawabannya

    Kontributor SuperUser, David Schwartz, sleske, dan Kimberly W memiliki jawaban untuk kita. Pertama, David Schwartz:

    Jika saya memiliki CPU dengan dua core dan masing-masing core memiliki cache L1 sendiri, mungkinkah Core1 dan Core2 keduanya men-cache bagian memori yang sama secara bersamaan.?

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

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

    Nilai lama akan berada di memori utama, yang tidak akan menjadi masalah karena inti 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.

    Diikuti oleh jawaban dari sleske:

    Ya, memiliki dua cache cache wilayah memori yang sama dapat terjadi dan sebenarnya merupakan masalah yang banyak terjadi dalam praktik. Ada berbagai solusi, misalnya:

    • Kedua cache bisa 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 dan artikel Wikipedia tentang topik tersebut memiliki tinjauan umum yang bagus tentang masalah dan kemungkinan solusinya.

    Dan jawaban terakhir kami dari Kimberly W:

    Untuk menjawab pertanyaan dalam judul posting 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 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.


    Punya sesuatu untuk ditambahkan ke penjelasan? Berbunyi dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang mengerti teknologi lainnya? Lihat utas diskusi lengkap di sini.

    Kredit Gambar: Lemsipmatt (Flickr)