"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يستخدم متجر std::atomic XCHG للتناسق المتسلسل على x86؟

لماذا يستخدم متجر std::atomic XCHG للتناسق المتسلسل على x86؟

تم النشر بتاريخ 2024-11-18
تصفح:257

Why does `std::atomic`\'s store use XCHG for sequential consistency on x86?

لماذا يستخدم متجر std::atomic XCHG لتحقيق الاتساق المتسلسل

في سياق std::atomic لبنيتي x86 وx86_64، عملية تخزين ذات تناسق متسلسل (std::memory_order_seq_cst) تستخدم XCHG بدلاً من مخزن بسيط مع حاجز ذاكرة كتقنية لتحقيق دلالات الإصدار المتسلسل.

الاتساق المتسلسل وxchg

يشير التناسق المتسلسل إلى أن جميع عمليات الذاكرة تظهر وكأنها يتم تنفيذها بترتيب تسلسلي ما، وهذا الترتيب هو نفسه بالنسبة لجميع سلاسل العمليات. XCHG، تعليمات x86 التي تتبادل قيم معاملتين ذريًا، تلبي بطبيعتها متطلبات الاتساق المتسلسل. باستخدام XCHG لإجراء عملية كتابة، يضمن std::atomic أن يصبح المتجر مرئيًا عالميًا لجميع سلاسل الرسائل عند نقطة معينة في ترتيب التنفيذ، مما يمنع إعادة الترتيب مع العمليات اللاحقة.

mov- store mfence vs. XCHG

في حين أن متجر mov بسيط متبوعًا بسياج ذاكرة (مثل mfence) يمكن أن يوفر نظريًا دلالات الإصدار، إلا أنه لا يكفي لعمليات مخزن الإصدار المتسلسل. MFENCE، هي تعليمات سياج الذاكرة التي تنشئ حاجزًا للذاكرة، وتضمن التزام عمليات الكتابة السابقة بالذاكرة قبل المتابعة. ومع ذلك، فإنه لا يمنع إعادة ترتيب عمليات التحميل اللاحقة قبل مخزن الإصدار.

اعتبارات الأداء

الاختيار بين mov-store mfence وXCHG للإصدار المتسلسل تتضمن عمليات المتجر مقايضات في الأداء.

  • في بعض وحدات المعالجة المركزية (مثل Intel Skylake)، يمكن أن يكون XCHG أكثر كفاءة من mov-store mfence، خاصة عندما لا يكون هناك كود تابع محيط يحتاج إلى المزامنة. مع العملية الذرية.
  • في وحدات المعالجة المركزية الأخرى، قد يكون mov-store mfence مفضلاً لسيناريوهات الإنتاجية العالية أو عندما يمكن أن تتداخل التعليمات البرمجية المحيطة مع التنفيذ مع العملية الذرية.

تفاصيل التنفيذ

من الناحية العملية، يختلف التنفيذ المحدد لمتجر std::atomic مع الاتساق المتسلسل اعتمادًا على المترجم وهندسة الأجهزة.

  • GCC/ Clang: تم استخدام mfence mov-store في الأصل ولكن تم التحول مؤخرًا إلى استخدام XCHG لمتاجر seq-cst.
  • مترجم Intel: يستخدم XCHG لمتاجر seq-cst.
  • Microsoft Visual C : يستخدم أيضًا XCHG لمتاجر seq-cst.

اكتساب السياج الضمني

البيان الذي x86 المتاجر التي لديها سياج اكتساب ضمني غير صحيح. تحتوي المتاجر الموجودة على x86 على دلالات إصدار، وليس دلالات مكتسبة. يتم عادةً فرض الحصول على دلالات باستخدام حواجز الذاكرة مثل mfence أو عمليات القراءة الذرية باستخدام دلالات std::memory_order_acquire.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3