سؤال

تحت أي ظرف من الظروف هو آمن أن يكون اثنين من المواضيع المختلفة في وقت واحد كتابة العناصر المجاورة من نفس مجموعة على x86 ؟ أنا أفهم أن بعض DS9K مثل أبنية مع مجنون نماذج الذاكرة وهذا يمكن أن يسبب كلمة تمزق ، ولكن على x86 واحد بايت عنونة.على سبيل المثال في لغة البرمجة D real 80-بت النقطة العائمة نوع x86.سيكون من الأسلم أن تفعل شيئا مثل:

real[] nums = new real[4];  // Assume new returns a 16-byte aligned block.
foreach(i; 0..4) {
    // Create a new thread and have it do stuff and 
    // write results to index i of nums.
}

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

تحرير:لا تقلق حول القراءة القيم التي هي مكتوبة.والافتراض هو أن هناك سوف أن تزامن قبل أي قيم قراءة.ما يهمني هو سلامة الكتابة في هذه الطريقة.

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

المحلول

X86 وقد متماسكة مخابئ.آخر معالج الكتابة إلى ذاكرة التخزين المؤقت الخط تستحوذ على كل شيء و لا الكتابة إلى ذاكرة التخزين المؤقت.هذا يضمن أن واحد بايت و 4 بايت القيم المكتوبة على المقابلة القيم الذرة تحديث.

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

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

نصائح أخرى

قد يكون في عداد المفقودين شيء, ولكن لا أتوقع أي مشاكل.الهندسة المعمارية x86 يكتب إلا ما يحتاج إليه ، فإنه لا يفعل أي كتابة خارج القيم المحددة.ذاكرة التخزين المؤقت-التطفل يتعامل مع ذاكرة التخزين المؤقت القضايا.

أنت تسأل عن x86 تفاصيل, ومع ذلك المثال الخاص بك هو في بعض لغة عالية المستوى.لديك سؤال محدد حول د يمكن الإجابة عليه من قبل الناس الذين كتب المترجم الذي تستخدمه, أو ربما D مواصفات اللغة.جافا على سبيل المثال يتطلب أن عنصر صفيف الوصول يجب أن لا يسبب تمزق.

فيما يتعلق x86 ، atomicity العمليات المحددة في المادة 8.1 من إنتل مطور برامج دليل حجم 3A.وفقا لذلك, الذرية عمليات تخزين تشمل:تخزين بايت, تخزين كلمة الانحياز كلمة dword الانحياز dword على جميع وحدات المعالجة المركزية x86.كما ينص على P6 في وقت لاحق وحدات المعالجة المركزية محاذاتها من 16 و 32 و 64 بت الوصول إلى الذاكرة المخبأة داخل ذاكرة التخزين المؤقت الخط الذرية.

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