Memory Consistency vs Cache Coherence


17

ความจริงที่ว่า Sequential Consistency เป็นคุณสมบัติที่แข็งแกร่งกว่า Cache Coherence หรือไม่?

ตามที่

โซรินดาเนียลเจ; Hill, Mark D; Wood, David A: ไพรเมอร์ที่สอดคล้องกับความจำและความสอดคล้องกันของแคช , Morgan & Claypool, 2011

ความต่อเนื่องตามลำดับสามารถอธิบายได้เป็น (ไม่เป็นทางการ):

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

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

ตอนนี้พวกเขาดำเนินการต่อและอธิบายการเชื่อมโยงกัน:

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

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

ในที่สุดพวกเขาชี้ให้เห็นความแตกต่าง:

คำจำกัดความนี้เน้นความแตกต่างที่สำคัญระหว่างการเชื่อมโยงและความสอดคล้องกัน: การเชื่อมโยงกันจะถูกระบุบนพื้นฐานที่ตั้งของหน่วยความจำต่อหน่วยความจำในขณะที่มีการระบุความสอดคล้องกับสถานที่หน่วยความจำทั้งหมด

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

นั่นหมายความว่าการเชื่อมโยงนั้นมีความเข้มงวดน้อยกว่าหรือไม่? (ซึ่งดูน่าขบขัน!) มีร่องรอยที่สอดคล้องกัน แต่ไม่สอดคล้องกันหรือไม่


2
โปรดทราบว่าเราไม่ชอบคำถามของแบบฟอร์ม "โปรดตรวจสอบคำตอบของฉัน!" คุณสามารถเพิ่มคำถามที่เฉพาะเจาะจงมากขึ้นได้ไหม? คุณรู้สึกว่าช่องว่างของคุณอยู่ที่ไหน
ราฟาเอล

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

@Ayrat ฉันอ่านส่วนสุดท้ายของคำถามของคุณเป็นคำตอบที่คุณต้องการตรวจสอบ หากเป็นกรณีนี้ควรมีข้อสงสัย (อย่างอื่นทำไมต้องถาม) ซึ่งคุณควรระบุสำหรับผู้อ่าน บางทีฉันอาจอ่านผิด?
ราฟาเอล

@Raphael 'ส่วนสุดท้ายต้องการตรวจสอบ' - ใช่ 'ทำไมถาม' - หัวข้อเป็นเรื่องใหม่และฉันไม่แน่ใจว่าข้อสรุปนั้นถูกต้อง ฉันจะพยายามหลีกเลี่ยงคำถามประเภทนี้ในอนาคตและอาจหาคนที่อยู่ใกล้เคียงเพื่อตรวจสอบ)
Ayrat

คำตอบ:


11

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

หลักฐานที่แสดงถึงความสอดคล้องกันอย่างต่อเนื่องตามลำดับ:

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

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

สิ่งนี้สามารถนำไปสู่ผลลัพธ์ที่น่าประหลาดใจ ตัวอย่างเช่น

initially A=B=0
process 1               process 2
store A := 1            load B (gets 1)
store B := 1            load A (gets 0) 

การติดตามนี้สอดคล้องกัน:

  • สำหรับคำสั่งซื้อคือ: proc2 loads A(gets 0),proc1 stores A:=1
  • สำหรับ B คำสั่งคือ: proc1 stores B:=1,proc2 loads B(gets 1)

แต่มันไม่สอดคล้องกัน! เนื่องจากถ้าproc2 load Bส่งคืน 1 จะproc1 store A := 1เกิดขึ้นแล้วและproc2 load Aควรส่งคืน 1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.