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

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

  •  19-09-2019
  •  | 
  •  

سؤال

عندما يقوم برنامجي بعملية تحميل مع الحصول على عملية Semantics / Store مع دلالات الإصدار أو ربما سياج كامل، فإنه يبطل ذاكرة التخزين المؤقت لمعهد وحدة المعالجة المركزية.
سؤالي هو: أي جزء من ذاكرة التخزين المؤقت قد تم إبطاله بالفعل؟ فقط خط التخزين المؤقت الذي عقد المتغير الذي استخدمته / إطلاق سراحه؟ أو ربما يتم إبطال ذاكرة التخزين المؤقت بأكملها؟ (L1 + L2 + L3 .. وهلم جرا؟). هل هناك اختلاف في هذا الموضوع عندما أستخدم الدلالات الاستحواذ / الإصدار، أو عندما أستخدم سياجا كاملا؟

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

المحلول

أنا لست خبيرا في هذا، لكنني تعثرت على هذه الوثيقة، ربما فهي مفيدةhttp://www.rdrop.com/users/paulmck/scaliability/paper/whymb.2009.04.05a.pdf.

نصائح أخرى

عند إجراء حمولة بدون أسوار أو mutexes، يمكن أن تأتي القيمة المحملة من أي مكان، أي مخابئ، يسجل (عن طريق تحسينات التحويل البرمجي)، أو ذاكرة الوصول العشوائي ... ولكن من سؤالك، كنت تعرف هذا بالفعل.

في معظم عمليات تطبيقات Mutex، عندما تكتسب Mutex، يتم تطبيق سياج دائما، إما صراحة (مثل Mfence أو الحاجز وما إلى ذلك) أو ضمنا (على سبيل المثال، بادئة قفل لقفل الحافلة على x86). يؤدي هذا إلى إبطال خطوط ذاكرة التخزين المؤقت لجميع التخزين المؤقت على المسار.

لاحظ أن ذاكرة التخزين المؤقت بأكملها غير إبطال، فقط خطوط ذاكرة التخزين المؤقت المعنية لموقع الذاكرة. يتضمن هذا أيضا خطوط Mutex (التي يتم تنفيذها عادة كقيمة في الذاكرة).

بالطبع، هناك تفاصيل خاصة بالهندسة المعمارية، ولكن هذه هي الطريقة التي يعمل بها بشكل عام.

لاحظ أيضا أن هذا ليس هو السبب الوحيد لإبطال التخزين المؤقت، حيث قد تكون هناك عمليات على وحدة المعالجة المركزية واحدة تحتاج إلى مخبأ على واحد آخر لإبطاله. سيوفر لك إجراء بحث Google الخاص ب "بروتوكولات ذاكرة التخزين المؤقت" الكثير من المعلومات حول هذا الموضوع.

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