سؤال

توفر Microsoft InterlockedCompareExchange وظيفة أداء الذرية مقارنة-و-عمليات المبادلة.هناك أيضا _InterlockedCompareExchange الجوهرية.

على x86 تنفيذ هذه باستخدام cmpxchg التعليمات.

ومع ذلك, قراءة من خلال الوثائق على هذه المناهج الثلاثة, لا يبدو أن الاتفاق على مواءمة المتطلبات.

إنتل الدليل المرجعي لا يقول شيئا عن المحاذاة (بخلاف ذلك إذا محاذاة التحقق من تمكين و محاذاتها الذاكرة الإشارة, يتم إنشاء استثناء)

أنا أيضا بحثت عن lock بادئة ، والتي تنص على

سلامة قفل البادئة لا تتأثر محاذاة الذاكرة المجال.

(التشديد من الألغام)

لذا يبدو إنتل أن أقول أن المحاذاة غير ذي صلة.العملية سوف تكون الذرية بغض النظر عن ما.

على _InterlockedCompareExchange الجوهرية الوثائق أيضا لا يقول شيئا عن المحاذاة ، ومع ذلك InterlockedCompareExchange وظيفة الدول التي

معلمات لهذه المهمة يجب أن تكون محاذاة على 32 بت الحدود ؛ وإلا فإن وظيفة سوف تتصرف بشكل غير متوقع على المعالجات x86 أنظمة أي غير x86 النظم.

حتى ما يعطي ؟ هي المواءمة بين متطلبات InterlockedCompareExchange فقط للتأكد من وظيفة العمل حتى قبل 486 وحدة المعالجة المركزية حيث cmpxchg التعليمات ليست متاحة ؟ التي يبدو من المرجح على أساس المعلومات الواردة أعلاه ، ولكن أود أن أتأكد قبل أن تعتمد على ذلك.:)

أو هو المحاذاة المطلوبة من قبل عيسى إلى ضمان atomicity و أنا أبحث عن الأماكن الخطأ في إنتل مرجع أدلة ؟

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

المحلول

على PDF أنت تقتبس من هو من 1999 بوضوح عفا عليها الزمن.

على ما يصل إلى تاريخ إنتل الوثائق, تحديدا حجم-3A يروي قصة مختلفة.

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

على حجم 3A, نظام البرمجة ل x86/x64 إنتل بوضوح:

8.1.1 مضمونة الذرية العمليات

على Intel486 المعالج (وأحدث المعالجات منذ) يضمن التالية الذاكرة الأساسية العمليات سوف تكون دائما نفذت الذرة:

  • قراءة أو كتابة بايت
  • قراءة أو كتابة كلمة الانحياز على 16 بت الحدود
  • قراءة أو كتابة doubleword الانحياز على 32 بت الحدود

في معالج Pentium (وأحدث المعالجات منذ) يضمن التالية ذاكرة إضافية العمليات سوف تكون دائما نفذت الذرة:

  • القراءة أو الكتابة quadword الانحياز في حدود 64 بت
  • 16-بت الوصول إلى uncached مواقع الذاكرة التي تدخل ضمن 32-بت ناقل البيانات

على P6 عائلة معالجات (وأحدث المعالجات منذ) ضمان التالية ذاكرة إضافية العملية ستكون دائما نفذت الذرة:

  • محاذاتها 16-, 32-و 64 بت بالوصول إلى الذاكرة المخبأة التي تناسب داخل ذاكرة التخزين المؤقت خط

يصل إلى cacheable الذاكرة التي تنقسم عبر ذاكرة التخزين المؤقت خطوط و حدود الصفحة لا يضمن أن تكون الذرية من قبل Intel Core 2 Duo Intel® Atom Intel Core الثنائي ، Pentium M, Pentium 4 Intel Xeon ، P6 عائلة بنتيوم ، Intel486 المعالجات.Intel Core 2 Duo Intel Atom Intel Core Duo, Pentium M, Pentium 4 Intel Xeon ، و P6 عائلة معالجات توفير حافلة إشارات التحكم التي تسمح الذاكرة الخارجية النظم الفرعية لجعل تقسيم العدد الذري;بيد أن دول عدم الانحياز البيانات سوف يصل يؤثر تأثيرا خطيرا على أداء المعالج و يجب تجنبها

نصائح أخرى

x86 لا لا يتطلب التوافق على cmpxchg التعليمات.ومع ذلك ، المحاذاة ينصح الأداء.هذا ينبغي أن يكون ليس من المستغرب, التوافق يعني أن البرامج المكتوبة مع دليل من قبل 14 عاما سوف لا تزال تعمل اليوم على المعالجات.

لماذا بالضبط يتطلب Microsoft المحاذاة ليست واضحة من الوثائق.قد يكون الأداء أو دعم RISC أبنية أو كليهما.

Intel® 64 و IA-32 أبنية مطور برامج دليل
المجلد 3 (3A):نظام دليل البرمجة
كانون الثاني / يناير 2013

8.1.2.2 برنامج التحكم في الحافلة قفل

صراحة قوة القفل دلالات البرنامج يمكن استخدام قفل البادئة مع الإرشادات التالية عندما تستخدم لتعديل موقع الذاكرة.[...]

• تبادل تعليمات (XADD, CMPXCHG ، CMPXCHG8B).
• قفل بادئة يتم تلقائيا افتراض XCHG التعليمات.
• [...]

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

• أي حدود 8-بت الوصول (مؤمن أو غير ذلك).
• 16-بت الحدود من أجل تأمين كلمة العدد.
• 32-بت الحدود من أجل تأمين doubleword يصل.
• 64-بت الحدود من أجل تأمين quadword يصل.

انظر هذا السؤال:المحاذاة الطبيعية المهم الأداء المطلوب في الهندسة المعمارية إلى x64 (حتى انها ليست فقط قبل x86 النظم ، ولكن بعد x86 منها جدا -- x64 قد يكون لا يزال قليلا من مكانة القضية لكنه في تزايد شعبية بعد كل شيء;-);التي قد تكون السبب في Microsoft الوثائق المطلوبة (من الصعب العثور على مستندات بشأن ما إذا كانت مايكروسوفت قد قررت فرض المحاذاة المسألة من خلال تمكين التحقق من المحاذاة -- التي قد تختلف من نظام التشغيل Windows الإصدار ؛ مدعيا في المستندات التي المحاذاة المطلوبة, MS تحافظ على حرية النفاذ في بعض نسخة من ويندوز حتى لو لم يجبر على الآخرين).

مايكروسوفت متشابكة واجهات برمجة التطبيقات أيضا تطبيق ia64 (في حين أنها لا تزال موجودة).لم يكن هناك قفل البادئة على ia64, فقط cmpxchg.acq و cmpxchg.rel تعليمات (أو fetchadd أخرى مماثلة حيوانات) ، كل هذه المحاذاة المطلوبة إذا كنت أتذكر بشكل صحيح.

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