โฮมเพจ » ทำอย่างไร » Cache ของ CPU ถูกล้างเมื่อใดกลับไปยังหน่วยความจำหลัก

    Cache ของ CPU ถูกล้างเมื่อใดกลับไปยังหน่วยความจำหลัก

    หากคุณเพิ่งเริ่มเรียนรู้วิธีการทำงานของซีพียูมัลติคอร์แคชการเชื่อมโยงกันของแคชและการทำงานของหน่วยความจำอาจดูสับสนเล็กน้อยในตอนแรก เมื่อคำนึงถึงเรื่องนี้แล้วคำถาม & คำตอบ SuperUser ของวันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่อยากรู้อยากเห็น.

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    คำถาม

    ผู้อ่าน SuperUser CarmeloS ต้องการทราบเมื่อแคชของ CPU ถูกล้างกลับไปยังหน่วยความจำหลัก:

    หากฉันมี CPU ที่มีสองคอร์และแต่ละคอร์มีแคช L1 ของตัวเองเป็นไปได้หรือไม่ที่ Core1 และ Core2 ทั้งคู่แคชหน่วยความจำส่วนเดียวกันในเวลาเดียวกันได้หรือไม่ ถ้าเป็นไปได้ค่าของหน่วยความจำหลักจะเป็นอย่างไรถ้าทั้ง Core1 และ Core2 ได้แก้ไขค่าในแคช?

    เมื่อใดที่แคชของ CPU ถูกล้างกลับไปยังหน่วยความจำหลัก?

    คำตอบ

    ผู้สนับสนุน SuperUser David Schwartz, sleske และ Kimberly W มีคำตอบสำหรับเรา มาก่อน David Schwartz:

    ถ้าฉันมีซีพียูที่มีสองคอร์และแต่ละคอร์มีแคช L1 ของตัวเองเป็นไปได้หรือไม่ที่ Core1 และ Core2 ทั้งคู่แคชในส่วนเดียวกันของหน่วยความจำในเวลาเดียวกัน?

    ใช่ประสิทธิภาพจะแย่มากถ้าไม่ใช่อย่างนั้น พิจารณาสองเธรดที่ใช้รหัสเดียวกัน คุณต้องการรหัสนั้นในแคช L1 ทั้งสอง.

    ถ้าเป็นไปได้ค่าของหน่วยความจำหลักจะเป็นอย่างไรถ้าทั้ง Core1 และ Core2 ได้แก้ไขค่าในแคช?

    ค่าเก่าจะอยู่ในหน่วยความจำหลักซึ่งจะไม่สำคัญเนื่องจากคอร์จะไม่อ่าน ก่อนที่จะนำค่าที่แก้ไขจากแคชออกจะต้องถูกเขียนลงในหน่วยความจำ โดยทั่วไปแล้วตัวแปร MESI บางส่วนจะถูกใช้ ในการใช้งานแบบดั้งเดิมของ MESI หากค่าถูกแก้ไขในแคชหนึ่งค่าจะไม่สามารถแสดงได้ในแคชอื่นใดในระดับเดียวกัน.

    ตามมาด้วยคำตอบจาก sleske:

    ใช่การมีแคชสองแคชในส่วนของหน่วยความจำเดียวกันสามารถเกิดขึ้นได้และเป็นปัญหาที่เกิดขึ้นจริงในทางปฏิบัติ มีวิธีแก้ไขปัญหาต่าง ๆ เช่น:

    • แคชทั้งสองสามารถสื่อสารกันได้เพื่อให้แน่ใจว่าพวกเขาจะไม่เห็นด้วย
    • คุณสามารถมีหัวหน้างานบางประเภทที่คอยตรวจสอบแคชทั้งหมดและอัพเดทตามนั้น
    • โปรเซสเซอร์แต่ละตัวตรวจสอบพื้นที่หน่วยความจำที่แคชไว้และเมื่อตรวจพบการเขียนก็จะส่งแคช (ตอนนี้ไม่ถูกต้อง) ออกไป

    ปัญหานี้เรียกว่าการเชื่อมโยงกันแคชและบทความ Wikipedia ในหัวข้อมีภาพรวมที่ดีของปัญหาและแนวทางแก้ไขที่เป็นไปได้.

    และคำตอบสุดท้ายของเราจาก Kimberly W:

    หากต้องการตอบคำถามในชื่อโพสต์ของคุณขึ้นอยู่กับว่าโปรโตคอลแคชคืออะไร หากเป็นการเขียนกลับแคชจะถูกล้างกลับไปยังหน่วยความจำหลักเท่านั้นเมื่อตัวควบคุมแคชไม่มีทางเลือกนอกจากใส่บล็อกแคชใหม่ในพื้นที่ว่างที่ถูกครอบครองแล้ว บล็อกที่ครอบครองพื้นที่ก่อนหน้านี้จะถูกลบออกและค่าของมันจะถูกเขียนกลับไปยังหน่วยความจำหลัก.

    โปรโตคอลอื่นคือการเขียนผ่าน ในกรณีนั้นเมื่อใดก็ตามที่แคชบล็อกถูกเขียนในระดับ n, บล็อกที่สอดคล้องกันในระดับ 1 + n มีการอัปเดต มันคล้ายกับแนวคิดในการกรอกแบบฟอร์มด้วยกระดาษคาร์บอนด้านล่าง สิ่งที่คุณเขียนด้านบนจะถูกคัดลอกลงในแผ่นงานด้านล่าง สิ่งนี้ช้าลงเพราะเห็นได้ชัดว่าเกี่ยวข้องกับการเขียนมากขึ้น แต่ค่าระหว่างแคชมีความสอดคล้องกันมากขึ้น ในรูปแบบการเขียนกลับเฉพาะแคชระดับสูงสุดเท่านั้นที่จะมีค่าที่ทันสมัยที่สุดสำหรับบล็อกหน่วยความจำที่เฉพาะเจาะจง.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.

    เครดิตรูปภาพ: Lemsipmatt (Flickr)