سجلات وحدة المعالجة المركزية وتماسك ذاكرة التخزين المؤقت

StackOverflow https://stackoverflow.com/questions/1963944

سؤال

ما هي العلاقة بين سجلات وحدة المعالجة المركزية و CPU ذاكرة التخزين المؤقت عندما يتعلق الأمر ببروتوكولات تماسك ذاكرة التخزين المؤقت مثل MESI؟ إذا تم تخزين قيمة معينة في ذاكرة التخزين المؤقت لوحدة المعالجة المركزية ، وتم تخزينها أيضًا في السجل ، فماذا سيحدث إذا تم تمييز خط ذاكرة التخزين المؤقت على أنه "قذر"؟ لفهمي ، لا يوجد قولون بأن السجل سيقوم بتحديث القيمة الخاصة به على الرغم من تحديث ذاكرة التخزين المؤقت (بسبب MESI).

hench هذا الرمز:

 static void Main()  
  {  
  bool complete = false;   
  var t = new Thread (() =>  
  {  
    bool toggle = false;  
    while (!complete) toggle = !toggle;  
  });  
  t.Start();  
  Thread.Sleep (1000);  
  complete = true;  
  t.Join();        // Blocks indefinitely  
}

(لنفترض أن المترجم لم يحسن الحمل لـ "كامل" خارج الحلقة)
إلى ما أفهمه ، فإن التحديث إلى "اكتمال" غير مرئي للمعلومات الثانية نظرًا لعقد القيمة داخل السجل (تم تحديث ذاكرة التخزين المؤقت ل CPU 2).

هل وضع قوى حاجز الذاكرة "للتغلب" على جميع السجلات؟ ما هي علاقة السجلات إلى ذاكرة التخزين المؤقت؟ وماذا عن السجلات وحواجز الذاكرة؟

هل كانت مفيدة؟

المحلول

لا توجد علاقة. استخدم الكلمة الرئيسية "المتطايرة".

نصائح أخرى

يضمن بروتوكول MESI المستخدم في منصة X86 تماسك ذاكرة التخزين المؤقت ، أي تغييرات في ذاكرة التخزين المؤقت لوحدة المعالجة المركزية واحدة يتم نشرها تلقائيًا إلى ذاكرة التخزين المؤقت الأخرى لموحدة المعالجة المركزية. لذلك متغير الكلمة الرئيسية على X86 و X64 مفيدة فقط لمنع إعادة ترتيب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top