ความสม่ำเสมอของหน่วยความจำคืออะไรและทำงานอย่างไร?

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

ลองนึกภาพสักครู่ว่าเรามีระบบที่มีหลายคอร์ แต่ไม่มีระบบใดที่มีลำดับชั้นแคชดังนั้นจึงมีมุมมองร่วมของหน่วยความจำ

ความสม่ำเสมอของหน่วยความจำ

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

หน่วยประมวลผลแรม Distancia

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

ความสอดคล้องของข้อมูลและความสม่ำเสมอของหน่วยความจำ

คอนสต็องเซีย ดาตอส

ความสอดคล้องของข้อมูลหมายถึงสัญญาระหว่างโปรแกรมและ RAM นั่นคือวิธีที่พวกเขาจะใช้หน่วยความจำ แต่โดยเฉพาะอย่างยิ่งเธรดการดำเนินการที่แตกต่างกันจะสื่อสารกันอย่างไร ตัวอย่างเช่นเธรด 1 ต้องการข้อมูล B ของเธรด 2 และเธรด 2 ข้อมูล A เพื่อให้ข้อมูลถูกต้องจึงเหมาะอย่างยิ่งสำหรับการทำงานที่ถูกต้องของโปรแกรมที่กำลังดำเนินการ

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

ปัญหาข้อมูลแคช

ผล Dual Core

ดังที่เราได้กล่าวไปก่อนหน้านี้แคชเป็นสิ่งที่ทำให้จำเป็นต้องมีระบบเชื่อมโยงที่ซับซ้อนเหตุผลนี้ง่ายมากและเกี่ยวข้องกับความจริงที่ว่าแคชมีสองประเภท:

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

สิ่งที่ง่ายที่สุดสำหรับวิศวกรฮาร์ดแวร์คือการเชื่อมต่อแคชส่วนตัวที่แตกต่างกันกับ RAM ปัญหาที่พวกเขาเผชิญคือหน่วยความจำ RAM มีช่องหน่วยความจำโดยเฉลี่ยเพียงไม่กี่ช่องดังนั้นในขณะที่หนึ่งคอร์จะเข้าถึง RAM อื่น ๆ ที่พวกเขายืนอยู่ นั่นคือเหตุผลที่แคชที่ใช้ร่วมกันมักใช้ในระดับสุดท้ายซึ่งเป็นสิ่งที่ RAM เชื่อมต่ออยู่

แคช Jerarquia

ในลำดับชั้นของแคชการสื่อสารเพียงอย่างเดียวของแต่ละระดับแคชคือการเชื่อมต่อในลักษณะที่แคชส่วนตัวไม่ได้เชื่อมต่อกับ RAM โดยตรง แต่เฉพาะกับแคชที่ใช้ร่วมกันหรือไปยังระดับแคชที่ตามมาหรือก่อนหน้าเท่านั้น แคชส่วนตัวถ้ามี

กลไกการดมกลิ่นเพื่อความสม่ำเสมอของหน่วยความจำ

แคช

การเชื่อมโยงกันของแคชไม่ได้ใช้งานผ่านตัวประมวลผลร่วมใด ๆ แต่ผ่านชุดของกลไกที่รวมอยู่ในฮาร์ดแวร์โปรโตคอลการเชื่อมโยงกันที่ใช้มากที่สุดสองแบบมีดังต่อไปนี้:

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

ในการค้นหาว่าสายแคชใดที่เปลี่ยนแปลงไปจะมีการใช้ "sniffer" ซึ่งเป็นกลไกฮาร์ดแวร์ที่ตรวจสอบการเข้าถึงหน่วยความจำและแคชโดยคอร์ต่างๆในลักษณะที่ระบบเชื่อมโยงกันจะรู้ว่าที่อยู่หน่วยความจำใดเปลี่ยนแปลงไปทุกขณะ ปัญหาของวิธีนี้คือมันปรับขนาดได้ไม่ดีนักกับคอร์จำนวนมาก

กลไกความสอดคล้องของหน่วยความจำแบบไดเร็กทอรี

ไมโครสโคปิโอ Circuito Electrónico

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

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