fence

fence

تجميع RISC-V مرجع

يغطي lyszt.net fence وتعليمات RISC-V الأخرى بمزيد من التفصيل.

الوصف

تُستخدم تعليمات FENCE لترتيب إدخال/إخراج الأجهزة ووصولات الذاكرة كما تراها قلوب RISC-V الأخرى والأجهزة الخارجية أو المعالجات المساعدة. يمكن ترتيب أي مجموعة من إدخال الجهاز (I) وإخراج الجهاز (O) وقراءات الذاكرة (R) وكتابات الذاكرة (W) بالنسبة إلى أي مجموعة من نفس العناصر. بشكل غير رسمي، لا يمكن لأي قلب RISC-V آخر أو جهاز خارجي ملاحظة أي عملية في مجموعة successor التالية لـ FENCE قبل أي عملية في مجموعة predecessor السابقة لـ FENCE. يوفر memorymodel وصفًا دقيقًا لنموذج اتساق ذاكرة RISC-V.

ترتب تعليمات FENCE أيضًا قراءات وكتابات الذاكرة التي يقوم بها القلب كما تُلاحظ من خلال قراءات وكتابات الذاكرة التي يقوم بها جهاز خارجي. ومع ذلك، لا ترتب تعليمات FENCE ملاحظات الأحداث التي يقوم بها جهاز خارجي باستخدام أي آلية إشارة أخرى.

ℹ
قد يلاحظ الجهاز وصولاً إلى موقع ذاكرة عبر بعض آليات الاتصال الخارجية، على سبيل المثال، سجل تحكم معيّن للذاكرة يقود إشارة مقاطعة إلى وحدة تحكم المقاطعات. هذا الاتصال خارج نطاق آلية ترتيب FENCE، وبالتالي لا يمكن لتعليمات FENCE تقديم أي ضمان حول متى يكون التغيير في إشارة المقاطعة مرئيًا لوحدة تحكم المقاطعات. قد توفر أجهزة محددة ضمانات ترتيب إضافية لتقليل الحمل البرمجي لكن تلك خارج نطاق نموذج ذاكرة RISC-V.

ستحدد EEI عمليات الإدخال/الإخراج الممكنة، وعلى وجه الخصوص، عناوين الذاكرة التي عند الوصول إليها بواسطة تعليمات التحميل والتخزين ستُعامَل وتُرتَّب كعمليات إدخال الجهاز وإخراج الجهاز على التوالي بدلاً من قراءات وكتابات الذاكرة. على سبيل المثال، عادةً ما يتم الوصول إلى أجهزة الإدخال/الإخراج المعيّنة للذاكرة باستخدام تحميلات وتخزينات غير مخزّنة مؤقتًا تُرتَّب باستخدام البتتين I و O بدلاً من البتتين R و W. قد تصف امتدادات مجموعة التعليمات أيضًا تعليمات إدخال/إخراج جديدة ستُرتَّب أيضًا باستخدام البتتين I و O في تعليمة FENCE.

ترميز وضع السياج

يحدد حقل وضع FENCE fm دلالات تعليمة FENCE. ترتب FENCE (مع fm=0000) جميع عمليات الذاكرة في مجموعة predecessor الخاصة بها قبل جميع عمليات الذاكرة في مجموعة successor الخاصة بها.

تُرمَّز تعليمة FENCE.TSO كتعليمة FENCE مع fm=1000 وpredecessor=RW وsuccessor=RW. ترتب FENCE.TSO جميع عمليات التحميل في مجموعة predecessor الخاصة بها قبل جميع عمليات الذاكرة في مجموعة successor الخاصة بها، وجميع عمليات التخزين في مجموعة predecessor الخاصة بها قبل جميع عمليات التخزين في مجموعة successor الخاصة بها. هذا يترك عمليات التخزين non-AMO في مجموعة predecessor الخاصة بـ FENCE.TSO's غير مرتبة مع تحميلات non-AMO في مجموعة successor الخاصة بها.

ℹ
نظرًا لأن FENCE RW,RW تفرض مجموعة شاملة من الترتيبات التي تفرضها FENCE.TSO، فمن الصحيح تجاهل حقل fm وتنفيذ FENCE.TSO كـ FENCE RW,RW.

الحقول غير المستخدمة في تعليمات FENCE --rs1 and rd-- محجوزة لسياجات أدق في الامتدادات المستقبلية. للتوافق الأمامي، يجب على التنفيذات الأساسية تجاهل هذه الحقول#، ويجب على البرمجيات القياسية تصفير هذه الحقول. وبالمثل، فإن العديد من إعدادات fm ومجموعات predecessor/successor محجوزة أيضًا للاستخدام المستقبلي. يجب على التنفيذات الأساسية معاملة جميع هذه التكوينات المحجوزة كتعليمات FENCE (مع fm=0000)، ويجب على البرمجيات القياسية استخدام التكوينات غير المحجوزة فقط.

ℹ
اخترنا نموذج ذاكرة مرنًا للسماح بأداء عالٍ من تنفيذات الآلات البسيطة ومن امتدادات المعالجات المساعدة أو المسرّعات المستقبلية المحتملة. نفصل ترتيب الإدخال/الإخراج عن ترتيب قراءة/كتابة الذاكرة لتجنب التسلسل غير الضروري داخل قلب برنامج تشغيل الجهاز وأيضًا لدعم مسارات بديلة غير ذاكرة للتحكم في المعالجات المساعدة أو أجهزة الإدخال/الإخراج المضافة. قد تتجاهل التنفيذات البسيطة بالإضافة إلى ذلك حقلي predecessor and successor وتنفذ دائمًا FENCE محافظًا على جميع العمليات.