Laman » bagaimana untuk » Kapan Cache CPU Dihancurkan Kembali ke Memori Utama?

    Kapan Cache CPU Dihancurkan Kembali ke Memori Utama?

    Sekiranya anda baru mula belajar bagaimana CPU multi-core, caching, koheren cache, dan memori berfungsi, ia mungkin kelihatan sedikit mengelirukan pada mulanya. Dengan itu, jawatan SuperUser Q & A hari ini mempunyai jawapan kepada soalan pembaca yang ingin tahu.

    Sesi Soalan & Jawapan hari ini datang kepada kami dengan ihsan SuperUser-bahagian pembahagian Stack Exchange, kumpulan yang diketuai oleh komuniti laman web Q & A.

    Soalan

    Pembaca SuperUser CarmeloS ingin tahu apabila cache CPU dibuang ke memori utama:

    Jika saya mempunyai CPU dengan dua teras dan setiap teras mempunyai cache L1 sendiri, mungkin Core1 dan Core2 kedua-dua cache bahagian memori yang sama pada masa yang sama? Jika boleh, apakah nilai memori utama jika kedua Core1 dan Core2 telah menyunting nilai mereka dalam cache?

    Kapan cache CPU memerah kembali ke ingatan utama?

    Jawapan

    Penyumbang SuperUser David Schwartz, sleske, dan Kimberly W mempunyai jawapan untuk kami. Pertama, David Schwartz:

    Sekiranya saya mempunyai CPU dengan dua teras dan setiap teras mempunyai cache L1 sendiri, mungkin Core1 dan Core2 kedua-dua cache bahagian memori yang sama pada masa yang sama?

    Ya, prestasi akan menjadi buruk jika ini tidak berlaku. Pertimbangkan dua benang yang menjalankan kod yang sama. Anda mahu kod itu dalam kedua-dua L1 cache.

    Jika boleh, apakah nilai memori utama jika kedua Core1 dan Core2 telah menyunting nilai mereka dalam cache?

    Nilai lama akan berada dalam ingatan utama, yang tidak akan menjadi masalah kerana teras tidak akan membacanya. Sebelum mengeluarkan nilai yang diubah suai dari cache, ia mesti ditulis ke ingatan. Biasanya, beberapa variasi protokol MESI digunakan. Dalam pelaksanaan tradisional MESI, jika nilai diubahsuai dalam satu cache, ia tidak dapat hadir pada semua cache lain pada tahap yang sama.

    Diikuti oleh jawapan dari sleske:

    Ya, mempunyai dua cache cache di kawasan memori yang sama boleh terjadi dan sebenarnya merupakan masalah yang banyak terjadi dalam praktik. Terdapat pelbagai penyelesaian, sebagai contoh:

    • Kedua-dua cache boleh berkomunikasi untuk memastikan mereka tidak bersetuju
    • Anda boleh mempunyai beberapa jenis penyelia yang memantau semua cache dan mengemas kininya dengan sewajarnya
    • Setiap pemproses memantau kawasan memori yang telah di-cache, dan apabila ia mengesan menulis, ia mengeluarkan cache (sekarang tidak sah)

    Masalahnya disebut koherensi cache dan artikel Wikipedia pada topik ini mempunyai gambaran yang baik tentang masalah dan penyelesaian yang mungkin.

    Dan jawapan terakhir kami dari Kimberly W:

    Untuk menjawab soalan dalam tajuk jawatan anda, ia bergantung kepada apa yang menjadi protokol caching. Sekiranya ia ditulis kembali, cache hanya akan dibuang ke memori utama apabila pengawal cache tidak mempunyai pilihan tetapi untuk meletakkan blok cache baru dalam ruang yang telah diduduki. Blok yang sebelumnya menduduki ruang dikeluarkan dan nilainya ditulis kembali ke ingatan utama.

    Protokol lain menulis-melalui. Dalam hal ini, bila-bila masa blok cache ditulis pada tahap n, blok yang sama pada tahap n + 1 dikemas kini. Ia sama dengan konsep untuk mengisi borang dengan kertas karbon di bawahnya; apa sahaja yang anda tulis di atas disalin pada helaian di bawah. Ini lebih perlahan kerana ia jelas melibatkan lebih banyak operasi penulisan, tetapi nilai antara cache lebih konsisten. Dalam skim tulis, hanya cache peringkat tertinggi akan mempunyai nilai paling terkini untuk blok ingatan tertentu.


    Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.

    Kredit Imej: Lemsipmatt (Flickr)