نافذة التسجيل

مثال على نظام نوافذ تسجيل رباعي النوافذ

في هندسة الحاسوب ، تُعدّ نوافذ التسجيل ميزةً تُخصّص سجلاتٍ لروتينٍ فرعيٍّ من خلال ربط مجموعةٍ فرعيةٍ من السجلات الداخلية ديناميكيًا بسجلاتٍ ثابتةٍ مرئيةٍ للمبرمج. تُطبّق نوافذ التسجيل لتحسين أداء المعالج عن طريق تقليل عدد عمليات المكدس المطلوبة لاستدعاءات الدوال والعودة منها. تُعتبر هذه النوافذ من أبرز ميزات تصميم Berkeley RISC ، وقد طُبّقت لاحقًا في بنى مجموعات التعليمات مثل AMD Am29000 و Intel i960 و Sun Microsystems SPARC وIntel Itanium .

عملية عامة

تُوفّر عدة مجموعات من السجلات لأجزاء البرنامج المختلفة. وتُخفى السجلات عمداً عن المبرمج لإجبار عدة إجراءات فرعية على مشاركة موارد المعالج.

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

التطبيق في وحدات المعالجة المركزية

في تصميم بيركلي RISC، لا يظهر للبرامج سوى ثمانية سجلات من أصل 64. تُعرف مجموعة السجلات الكاملة بملف السجلات ، وتُعرف أي مجموعة محددة من ثمانية سجلات بنافذة . يسمح الملف لما يصل إلى ثمانية استدعاءات إجرائية بامتلاك مجموعات سجلات خاصة بها. طالما أن البرنامج لا يستدعي سلاسل استدعاءات أطول من ثمانية استدعاءات، فلا داعي لتخزين السجلات في الذاكرة الرئيسية أو ذاكرة التخزين المؤقت، وهي عملية بطيئة مقارنةً بالوصول إلى السجلات.

بالمقارنة، توفر بنية SPARC من Sun Microsystems رؤية متزامنة لأربع مجموعات من ثمانية سجلات، كل منها مكونة من ثمانية سجلات. ثلاث من هذه المجموعات مُغطاة بنوافذ. تشكل ثمانية سجلات (من i0 إلى i7) سجلات الإدخال لمستوى الإجراء الحالي. ثمانية سجلات (من L0 إلى L7) محلية لمستوى الإجراء الحالي، وثمانية سجلات (من o0 إلى o7) هي مخرجات مستوى الإجراء الحالي إلى المستوى التالي المُستدعى. عند استدعاء إجراء، تتحرك نافذة السجلات بمقدار ستة عشر سجلاً، مما يُخفي سجلات الإدخال القديمة والسجلات المحلية القديمة، ويجعل سجلات الإخراج القديمة هي سجلات الإدخال الجديدة. تُستخدم السجلات المشتركة (سجلات الإخراج القديمة وسجلات الإدخال الجديدة) لتمرير المعلمات. أخيرًا، ثمانية سجلات (من g0 إلى g7) مرئية لجميع مستويات الإجراءات.

حسّن معالج AMD 29000 التصميمَ من خلال السماح بنوافذ ذات أحجام متغيرة، مما يُحسّن الاستخدام في الحالة الشائعة التي تتطلب أقل من ثمانية سجلات لإجراء استدعاء. كما فصل السجلات إلى مجموعة عامة من 64 سجلًا، ومجموعة إضافية من 128 سجلًا للنوافذ. وبالمثل، استخدمت بنية IA-64 (إيتانيوم) نوافذ ذات أحجام متغيرة، مع 32 سجلًا عامًا و96 سجلًا للنوافذ.

في بنية Infineon C166 ، تُعدّ معظم المسجلات مجرد مواقع في ذاكرة الوصول العشوائي الداخلية، وتتميز بإمكانية الوصول إليها كمسجلات. ومن بين هذه المسجلات، فإن عناوين المسجلات العامة الستة عشر (R0-R15) غير ثابتة. فبدلاً من ذلك، يقع المسجل R0 عند العنوان الذي يشير إليه مسجل "مؤشر السياق" (CP)، وتليه المسجلات الخمسة عشر المتبقية بالتسلسل. [ 1 ]

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

في وحدات معالجة الرسومات

تُعدّ نوافذ التسجيل آلية شائعة الاستخدام في وحدات معالجة الرسومات، لا سيما في وحدات التنفيذ المُكلّفة بتشغيل سلاسل العمليات الحسابية العامة. على سبيل المثال، في بنية GenX من إنتل، تمتلك كل وحدة من وحدات التنفيذ ("النوى") العديدة التي تعمل بالتوازي ملف تسجيل خاص بها، يحتوي على (على سبيل المثال) 256 سجلًا فعليًا للأغراض العامة. يصل كل خيط مُنشأ على نواة إلى نافذة التسجيل الخاصة به باستخدام فهرس يبدأ من الصفر، والذي يُربط بواسطة العتاد بمجموعة منفصلة من السجلات الفعلية المتجاورة في ملف تسجيل تلك النواة. قد تتكون كل نافذة من عدد متغير من السجلات اعتمادًا على الوظيفة التي يُنفذها الخيط، ولكن عادةً ما يقتصر على نصف عدد السجلات الفعلية في الملف. هذا يسمح (على الأقل) لخيط ثانٍ بتولي نواة خاملة فورًا عندما يتوقف الخيط السابق لسبب ما (عادةً للتواصل مع مخازن الذاكرة الخارجية).

نقد

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

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

مراجع

  1. "دليل تعليمات مجموعة Infineon C166" (ملف PDF) . كيل . تم الاطلاع عليه بتاريخ 12 مارس 2020 .
  2. ماغنوسون، بيتر (أبريل 1997). "فهم المكدسات والسجلات في معمارية سبارك" . CSE 131 - بناء المترجمات . جامعة سان دييغو . تاريخ الاسترجاع: 24 أكتوبر 2024. يكمن العيب في أنه عند التفاعل مع النظام، يجب تفريغ السجلات إلى المكدس، مما يستلزم سلسلة طويلة من عمليات الكتابة إلى الذاكرة لبيانات غالبًا ما تكون غير ذات صلة. كانت نوافذ السجلات فكرة سيئة ناتجة عن دراسات محاكاة اقتصرت على دراسة البرامج بشكل منفصل، بدلاً من دراسة أحمال العمل متعددة المهام، وعن استخدام مترجمات ذات تحسين ضعيف.

للمزيد من القراءة