إعادة تسمية السجل
في هندسة الحاسوب ، تُعدّ إعادة تسمية السجلات تقنيةً تُجرّد السجلات المنطقية من السجلات الفيزيائية. يرتبط بكل سجل منطقي مجموعة من السجلات الفيزيائية. عندما تُشير تعليمة لغة الآلة إلى سجل منطقي مُحدد، يُحوّل المعالج هذا الاسم إلى سجل فيزيائي مُحدد أثناء التنفيذ. السجلات الفيزيائية غير قابلة للقراءة مباشرةً، ولا يُمكن الرجوع إليها إلا عبر أسمائها المتعارف عليها.
تُستخدم هذه التقنية لإزالة تبعيات البيانات الزائفة الناتجة عن إعادة استخدام السجلات بواسطة تعليمات متتالية لا توجد بينها أي تبعيات بيانات حقيقية. وتؤدي إزالة هذه التبعيات الزائفة إلى زيادة التوازي على مستوى التعليمات في سلسلة التعليمات، وهو ما يمكن استغلاله بتقنيات متنوعة ومتكاملة، مثل التنفيذ فائق القياس والتنفيذ خارج الترتيب، لتحسين الأداء .
نهج حل المشكلات
تتكون البرامج من تعليمات تُجري عمليات على قيم. يجب أن تُسمّي هذه التعليمات هذه القيم لتمييزها عن بعضها البعض. مثال على تعليمة نموذجية: أضفووضع النتيجة فيفي هذه التعليمات،،وهي أسماء مواقع التخزين.
من الشائع استخدام القيم التي يتم التلاعب بها عدة مرات متتالية. تستفيد أجهزة التسجيل من ذلك من خلال توفير عدد من سجلات المعالج ، وهي مواقع ذاكرة عالية السرعة تُخزّن هذه القيم. ولأن الوصول إلى السجلات عادةً ما يكون أسرع بكثير من الوصول إلى الذاكرة ، فإن البرامج والمعالجات عالية الأداء تحاول العمل على السجلات كلما أمكن ذلك. تُعرف مجموعة السجلات في تصميم معين باسم ملف السجلات .
يُشار إلى كل سجل في الملف برقم في لغة الآلة . يتطلب ترميز رقم في لغة الآلة عدة بتات. على سبيل المثال، في معالج Zilog Z80، كان هناك ثمانية سجلات للأغراض العامة في الملف. يتطلب اختيار إحدى القيم الثمانية ثلاثة بتات، لأن 2² + 3² = 8. يمكن أن يؤدي استخدام المزيد من السجلات المعمارية (المنطقية) من نفس العرض والنوع إلى أداء أفضل، حيث يمكن تخزين المزيد من القيم المؤقتة في السجلات، وبالتالي تجنب العمليات المكلفة للحفظ أو التحميل من الذاكرة. وبالمثل، يمكن للسجلات الأوسع التي يمكنها تخزين المزيد من البيانات أن تُحسّن الأداء أيضًا، إذا كان عبء العمل يستفيد من ذلك. عمومًا، تستخدم المعالجات الأحدث وتلك التي تحتوي على كلمات تعليمات أكبر عددًا أكبر من السجلات كلما أمكن ذلك. على سبيل المثال، تحتوي بنية مجموعة تعليمات IA-32 على 8 سجلات للأغراض العامة، و x86-64 على 16 سجلًا، والعديد من معالجات RISC على 32 سجلًا، و IA-64 على 128 سجلًا.
تُقابل مزايا ملف السجلات الأكبر حجمًا الحاجة إلى استخدام عدد أكبر من البتات لترميز رقم السجل. على سبيل المثال، في نظام يستخدم تعليمات 32 بت، قد ترغب في وجود ثلاثة سجلات، بحيث يمكنك تنفيذ عمليات من النوع=إذا احتوى ملف السجلات على 32 مدخلاً، فسيتطلب كل مرجع 5 بتات، وبالتالي ستشغل مجموعة السجلات الثلاثة 15 بتًا، مما يترك 17 بتًا لترميز العملية والمعلومات الأخرى. ويتطلب توسيع ملف السجلات إلى 64 مدخلاً 6 بتات، أي ما مجموعه 18 بتًا. ورغم أن هذا قد يؤدي إلى أداء أسرع، إلا أنه يعني أيضًا وجود عدد أقل من البتات المتبقية لترميز التعليمات. وهذا يدفع إلى محاولة موازنة حجم الملف مع عدد التعليمات الممكنة.
معطل
كانت المعالجات في الحواسيب القديمة تعمل غالبًا بالتزامن مع ذاكرتها الرئيسية، مما قلل من مزايا ملفات السجلات الكبيرة. ومن الملاحظات التصميمية الشائعة في سوق الحواسيب الصغيرة في ستينيات القرن الماضي، تنفيذ السجلات فعليًا في الذاكرة الرئيسية، وفي هذه الحالة، تمثلت ميزة الأداء ببساطة في إمكانية وصول التعليمات مباشرةً إلى الموقع بدلًا من استخدام بايت أو اثنين لتحديد عنوان الذاكرة بالكامل. هذا جعل التعليمات أصغر حجمًا، وبالتالي أسرع قراءةً. كان هذا النوع من التصميم، الذي يُحسّن الأداء إلى أقصى حد من خلال ضبط مجموعة التعليمات بدقة لتحقيق الحد الأدنى من الحجم، شائعًا حتى ثمانينيات القرن الماضي. ومن الأمثلة على هذا النهج معالج MOS 6502 ، الذي كان يحتوي على سجل واحد فقط، يُشار إليه باسم المُراكم ، ونمط عنونة خاص "للصفحة الصفرية" لأول 256 بايت من الذاكرة. وضع التعليمات والبيانات في الصفحة الصفرية يعني أن طول التعليمات أصبح بايتين فقط بدلًا من ثلاثة، مما حسّن الأداء بشكل كبير من خلال تجنب عمليات القراءة، موفرًا فوائد مماثلة لوجود المزيد من السجلات.
أدى الانتشار الواسع لذاكرة الوصول العشوائي الديناميكية (DRAM) في سبعينيات القرن الماضي إلى تغيير هذا النهج. مع مرور الوقت، ازداد أداء وحدات المعالجة المركزية (CPU) مقارنةً بالذاكرة المتصلة بها، ولم يعد من المنطقي استخدام الذاكرة الرئيسية كمسجلات. نتج عن ذلك ملفات مسجلات داخلية في وحدة المعالجة المركزية ذات أحجام متزايدة، وذلك لتجنب الرجوع إلى الذاكرة قدر الإمكان. مع ذلك، لا يمكن تجنب الوصول إلى الذاكرة تمامًا عمليًا، ومع ازدياد فرق السرعة، أصبح كل وصول من هذا القبيل مكلفًا بشكل متزايد من حيث عدد التعليمات التي كان من الممكن تنفيذها لو كانت القيمة موجودة في مسجل.
قد تستغرق التعليمات المختلفة أوقاتًا متفاوتة؛ فعلى سبيل المثال، قد يتمكن المعالج من تنفيذ مئات التعليمات التي تربط بين المسجلات أثناء عملية تحميل واحدة من الذاكرة الرئيسية. ومن أهم التحسينات في الأداء السماح بتنفيذ هذه التعليمات السريعة بينما تنتظر التعليمات الأخرى البيانات. وهذا يعني أن التعليمات لا تُنفذ بالترتيب المحدد في رمز الآلة، بل تُنفذ خارج هذا الترتيب .
لنفترض أن هذا الجزء من التعليمات البرمجية يعمل على وحدة معالجة مركزية خارج الترتيب:
r1 ≔ m [ 1024 ] ؛ اقرأ القيمة في موقع الذاكرة 1024r1 ≔ r1 + 2 ; أضف اثنين إلى القيمةm [ 1032 ] ≔ r1 ؛ احفظ النتيجة في الموقع 1032r1 ≔ m [ 2048 ] ; قراءة القيمة في 2048r1 ≔ r1 + 4 ; أضف 4m[2056]≔r1;save it to 2056The instructions in the final three lines are independent of the first three instructions, but the processor cannot finish r1 ≔ m[2048] until the preceding m[1032] ≔ r1 is complete, as doing so would add four to the value of 1024, not 2048.
If another register is available, this restriction can be eliminated by choosing different registers for the first three and the second three instructions:
r1≔m[1024]r1≔r1+2m[1032]≔r1r2≔m[2048]r2≔r2+4m[2056]≔r2Now the last three instructions can be executed in parallel with the first three. The program will run faster than before by eliminating the data dependency caused by unnecessarily using the same register in both sequences. A compiler can detect independent instruction sequences and, if there are registers that are available for use, choose different registers during register allocation in the code generation process.
However, to speed up code generated by compilers that do not perform that optimization, or code for which there were not sufficient registers to perform that optimization, many high-performance CPUs provide a register file with more registers than are specified in the instruction set, and, in hardware, rename references in instruction-set-defined registers to refer to registers in the register file, so that the original instruction sequence, using only r1, behaves as if it were:
rA≔m[1024]rA≔rA+2m[1032]≔rArB≔m[2048]rB≔rB+4m[2056]≔rBwith register r1 "renamed" to the internal register rA for the first three instructions and to the internal register rB for the second three instructions. This removes the false data dependency, allowing the first three instructions to be executed in parallel with the second three instructions.
Data hazards
When more than one instruction references a particular location as an operand, either by reading it (as an input) or by writing to it (as an output), executing those instructions in an order different from the original program order can lead to three kinds of data hazards:
- Read-after-write (RAW)
- يجب أن تُعيد عملية القراءة من سجل أو موقع في الذاكرة القيمة التي تم وضعها هناك بواسطة آخر عملية كتابة في ترتيب البرنامج، وليس قيمة عملية كتابة أخرى. يُشار إلى هذا باسم التبعية الحقيقية أو تبعية التدفق ، ويتطلب تنفيذ التعليمات بترتيب البرنامج.
- الكتابة بعد الكتابة (WAW)
- يجب أن تترك عمليات الكتابة المتتالية إلى سجل أو موقع ذاكرة معين ذلك الموقع محتويًا على نتيجة الكتابة الثانية. ويمكن حل هذه المشكلة عن طريق دمج (أو إلغاء أو إبطال) عملية الكتابة الأولى إذا لزم الأمر. تُعرف تبعيات WAW أيضًا باسم تبعيات الإخراج .
- الكتابة بعد القراءة (WAR)
- يجب أن تُعيد عملية القراءة من سجل أو موقع في الذاكرة آخر قيمة كُتبت في ذلك الموقع، وليس قيمة كُتبت برمجيًا بعد القراءة. هذا نوع من التبعية الزائفة التي يمكن حلها بإعادة التسمية. تُعرف تبعيات ملفات WAR أيضًا باسم التبعيات المضادة .
بدلاً من تأخير عملية الكتابة حتى اكتمال جميع عمليات القراءة، يمكن الاحتفاظ بنسختين من الموقع، القيمة القديمة والقيمة الجديدة. يمكن تزويد عمليات القراءة التي تسبق كتابة القيمة الجديدة، وفقًا لترتيب البرنامج، بالقيمة القديمة، حتى في حين يتم تزويد عمليات القراءة الأخرى التي تلي الكتابة بالقيمة الجديدة. يتم بذلك كسر التبعية الزائفة، وتُتاح فرص إضافية للتنفيذ خارج الترتيب. عند تلبية جميع احتياجات القراءة من القيمة القديمة، يمكن حذفها. هذا هو المفهوم الأساسي وراء إعادة تسمية السجلات.
يمكن إعادة تسمية أي شيء تتم قراءته وكتابته. وبينما تُناقش سجلات الأغراض العامة وسجلات الفاصلة العائمة بشكل أكبر، فإن سجلات العلامات وسجلات الحالة، أو حتى بتات الحالة الفردية، تُعاد تسميتها بشكل شائع أيضًا.
يمكن أيضًا إعادة تسمية مواقع الذاكرة، على الرغم من أن ذلك لا يُمارس عادةً بنفس القدر الذي يُمارس به إعادة تسمية السجلات. يُعد مخزن التخزين المُتحكم به في معالج Transmeta Crusoe شكلاً من أشكال إعادة تسمية الذاكرة.
لو امتنعت البرامج عن إعادة استخدام السجلات فورًا، لما كانت هناك حاجة لإعادة تسميتها. بعض مجموعات التعليمات (مثل IA-64 ) تحدد أعدادًا كبيرة جدًا من السجلات لهذا السبب تحديدًا. مع ذلك، توجد قيود على هذا النهج:
- يصعب على المترجم تجنب إعادة استخدام السجلات دون زيادة كبيرة في حجم الكود. ففي الحلقات، على سبيل المثال، سيتعين على التكرارات المتتالية استخدام سجلات مختلفة، مما يتطلب تكرار الكود في عملية تُسمى فك الحلقة ، أو استخدام كود ذاتي التعديل لتغيير معاملات الهدف في كل تكرار.
- تتطلب الأعداد الكبيرة من السجلات المزيد من البتات لتحديد السجل كمعامل في التعليمات، مما يؤدي إلى زيادة حجم التعليمات البرمجية.
- لقد حددت العديد من مجموعات التعليمات تاريخياً أعداداً أصغر من السجلات، ولا يمكن تغييرها مع الحفاظ على التوافق مع الإصدارات السابقة.
Code size increases are important because when the program code is larger, the instruction cache misses more often and the processor stalls waiting for new instructions.
السجلات المعمارية مقابل السجلات المادية
تُحدد برامج لغة الآلة عمليات القراءة والكتابة لمجموعة محدودة من السجلات التي تحددها بنية مجموعة التعليمات (ISA). على سبيل المثال، تحدد بنية مجموعة تعليمات ألفا 32 سجلًا للأعداد الصحيحة، عرض كل منها 64 بت، و32 سجلًا للأعداد العشرية، عرض كل منها 64 بت. هذه هي سجلات البنية . تُحدد البرامج المكتوبة للمعالجات التي تعمل بمجموعة تعليمات ألفا عمليات قراءة وكتابة هذه السجلات الـ 64. إذا أوقف المبرمج البرنامج في مصحح الأخطاء، فبإمكانه مراقبة محتويات هذه السجلات الـ 64 (وبعض سجلات الحالة) لتحديد تقدم عمل الجهاز.
يحتوي معالج Alpha 21264 ، الذي يُطبّق هذه البنية، على 80 سجلًا فعليًا للأعداد الصحيحة و72 سجلًا فعليًا للأعداد العشرية . يوجد على شريحة Alpha 21264، 80 موقعًا منفصلًا فعليًا لتخزين نتائج عمليات الأعداد الصحيحة، و72 موقعًا لتخزين نتائج عمليات الأعداد العشرية (في الواقع، يوجد عدد أكبر من المواقع، لكن هذه المواقع الإضافية غير ذات صلة بعملية إعادة تسمية السجلات).
يصف النص التالي أسلوبين لإعادة تسمية السجلات، واللذان يتم تمييزهما بواسطة الدائرة التي تحتفظ بالبيانات الجاهزة لوحدة التنفيذ.
في جميع أنظمة إعادة التسمية، يحوّل الجهاز سجلات البنية المشار إليها في سلسلة التعليمات إلى علامات. بينما قد تُحدد سجلات البنية بـ 3 إلى 5 بتات، فإن العلامات عادةً ما تكون رقمًا من 6 إلى 8 بتات. يجب أن يحتوي ملف إعادة التسمية على منفذ قراءة لكل مدخل من كل تعليمة يُعاد تسميتها في كل دورة، ومنفذ كتابة لكل مخرج من كل تعليمة يُعاد تسميتها في كل دورة. ولأن حجم ملف السجلات يزداد عمومًا بمربع عدد المنافذ، فإن ملف إعادة التسمية عادةً ما يكون كبيرًا جدًا ويستهلك طاقة كبيرة.
في نمط ملفات السجلات المفهرسة بالعلامات ، يوجد ملف سجلات واحد كبير لقيم البيانات، يحتوي على سجل واحد لكل علامة. على سبيل المثال، إذا كان الجهاز يحتوي على 80 سجلًا فعليًا، فسيستخدم علامات مكونة من 7 بتات. في هذه الحالة، تبقى 48 قيمة من قيم العلامات الممكنة غير مستخدمة. في هذا النمط، عند إصدار تعليمة لوحدة التنفيذ، تُرسل علامات سجلات المصدر إلى ملف السجلات الفعلي، حيث تُقرأ القيم المقابلة لتلك العلامات وتُرسل إلى وحدة التنفيذ.
في نمط محطة الحجز ، توجد العديد من ملفات التسجيل الترابطية الصغيرة، عادةً ما يكون هناك ملف واحد عند مدخل كل وحدة تنفيذ. لكل مُعامل من مُعاملات كل تعليمة في قائمة الانتظار مكانٌ لقيمة في أحد ملفات التسجيل هذه. في هذا النمط، عند إصدار تعليمة إلى وحدة تنفيذ، تُقرأ إدخالات ملف التسجيل المُطابقة لإدخال قائمة الانتظار وتُرسل إلى وحدة التنفيذ.
- ملف السجل المعماري أو ملف سجل التقاعد (RRF)
- حالة السجل المُلتزم به في الجهاز. ذاكرة الوصول العشوائي (RAM) مُفهرسة برقم السجل المنطقي. عادةً ما تُكتب فيها النتائج عند إخراجها من المخزن المؤقت لإعادة الترتيب أو الالتزام بها.
- ملف المستقبل
- حالة السجل الأكثر تخمينًا في الجهاز. ذاكرة الوصول العشوائي (RAM) مفهرسة برقم السجل المنطقي.
- ملف السجل النشط
- مصطلح مجموعة Intel P6 لملف المستقبل.
- مخزن التاريخ
- يُستخدم عادةً مع ملف مستقبلي. يحتوي على القيم "القديمة" للسجلات التي تم استبدالها. إذا كان المُنتِج لا يزال قيد التنفيذ، فقد يكون مُفهرسًا في ذاكرة الوصول العشوائي (RAM) برقم مخزن التاريخ. بعد حدوث خطأ في التنبؤ بالتفرع، يجب استخدام النتائج من مخزن التاريخ - إما بنسخها، أو بتعطيل البحث عن الملف المستقبلي، ويكون مخزن التاريخ مُفهرسًا في ذاكرة الوصول العشوائي (CAM) برقم السجل المنطقي.
- مخزن إعادة الترتيب (ROB)
- بنية مُفهرسة تسلسليًا (دائريًا) لكل عملية على حدة، للتعليمات قيد التنفيذ. تختلف عن مخزن التاريخ لأن مخزن إعادة الترتيب يأتي عادةً بعد ملف المستقبل (إن وُجد) وقبل ملف سجلات البنية. يمكن أن تكون مخازن إعادة الترتيب فارغة أو تحتوي على بيانات. على سبيل المثال: في مخزن إعادة الترتيب الخاص بـ Willamette، تشير مدخلات مخزن إعادة الترتيب إلى سجلات في ملف السجلات الفيزيائية، وتحتوي أيضًا على بيانات إدارية أخرى. كان هذا أيضًا أول تصميم خارج الترتيب قام به آندي جلو في إلينوي باستخدام HaRRM. في مخزن إعادة الترتيب الخاص بـ P6، تحتوي مدخلات مخزن إعادة الترتيب على بيانات؛ ولا يوجد ملف سجلات فيزيائية منفصل. تُنسخ قيم البيانات من مخزن إعادة الترتيب إلى ملف سجلات إعادة الترتيب عند انتهاء التنفيذ. ملاحظة صغيرة: إذا كان هناك ترابط زمني في مدخلات مخزن إعادة الترتيب (أي، إذا كانت التعليمات متقاربة في تسلسل تعليمات فون نيومان، تُكتب بشكل متقارب زمنيًا، فقد يكون من الممكن دمج عمليات الكتابة على مدخلات مخزن إعادة الترتيب، وبالتالي تقليل عدد المنافذ مقارنةً بمخزن إعادة ترتيب/ملف سجلات فيزيائية منفصل). ليس من الواضح ما إذا كان ذلك يُحدث فرقًا، إذ ينبغي تخزين PRF. عادةً لا تحتوي ROBs على منطق ترابطي، وبالتأكيد لا تحتوي أي من ROBs التي صممها آندي غليو على CAMs. أصرّ كيث ديفندورف لسنوات عديدة على أن ROBs تحتوي على منطق ترابطي معقد. ربما كان أول اقتراح لـ ROB يحتوي على CAMs.
ملف تسجيل مفهرس بالعلامات
هذا هو أسلوب إعادة التسمية المستخدم في MIPS R10000 و Alpha 21264 وفي قسم FP من AMD Athlon .
في مرحلة إعادة التسمية، يُبحث عن كل سجل معماري مُشار إليه (للقراءة أو الكتابة) في ملف إعادة تعيين مُفهرس معماريًا . يُعيد هذا الملف علامة وبت جاهزية. تكون العلامة غير جاهزة إذا كانت هناك تعليمة مُدرجة في قائمة الانتظار ستكتب إليها ولم تُنفذ بعد. بالنسبة لمعاملات القراءة، تحل هذه العلامة محل السجل المعماري في التعليمة. لكل عملية كتابة سجل، تُسحب علامة جديدة من مخزن العلامات الحرة (FIFO)، ويُكتب تعيين جديد في ملف إعادة التعيين، بحيث تُشير التعليمات اللاحقة التي تقرأ السجل المعماري إلى هذه العلامة الجديدة. تُعلّم العلامة بأنها غير جاهزة، لأن التعليمة لم تُنفذ بعد. يُحفظ السجل الفعلي السابق المُخصص لذلك السجل المعماري مع التعليمة في مخزن إعادة الترتيب ، وهو مخزن FIFO يحتفظ بالتعليمات بترتيب البرنامج بين مرحلتي فك التشفير والتخرج.
تُوضع التعليمات بعد ذلك في قوائم انتظار مختلفة . عند تنفيذ التعليمات، تُبثّ علامات نتائجها، وتقوم قوائم الانتظار بمطابقة هذه العلامات مع علامات معاملات المصدر غير الجاهزة. تعني المطابقة أن المعامل جاهز. كما يقوم ملف إعادة التعيين بمطابقة هذه العلامات، ليتمكن من وضع علامة على السجلات الفيزيائية المقابلة بأنها جاهزة. عندما تكون جميع معاملات تعليمة ما في قائمة انتظار جاهزة، تصبح تلك التعليمة جاهزة للتنفيذ. تختار قوائم الانتظار التعليمات الجاهزة لإرسالها إلى الوحدات الوظيفية المختلفة في كل دورة. تبقى التعليمات غير الجاهزة في قوائم الانتظار. قد يؤدي هذا الإزالة غير المرتبة للتعليمات من قوائم الانتظار إلى زيادة حجمها واستهلاكها للطاقة.
تُقرأ التعليمات الصادرة من ملف سجلات فيزيائية مُفهرسة بالعلامات (متجاوزةً معاملات البث المباشر) ثم تُنفذ. تُكتب نتائج التنفيذ إلى ملف السجلات الفيزيائية المُفهرسة بالعلامات، كما تُبث إلى شبكة التجاوز التي تسبق كل وحدة وظيفية. عند انتهاء التنفيذ، تُوضع العلامة السابقة للسجل المعماري المكتوب في قائمة الانتظار الفارغة ليُعاد استخدامها لتعليمات مُفككة حديثًا.
يؤدي حدوث استثناء أو خطأ في توقع مسار التفرع إلى عودة ملف إعادة التعيين إلى حالة إعادة التعيين عند آخر تعليمة صالحة، وذلك من خلال دمج لقطات الحالة والتكرار عبر العلامات السابقة في قائمة الانتظار قبل التخرج. ولأن هذه الآلية ضرورية، ولأنها قادرة على استعادة أي حالة إعادة تعيين (وليس فقط الحالة السابقة للتعليمة التي يتم تخرجها حاليًا)، يمكن معالجة أخطاء توقع مسار التفرع قبل وصول التفرع إلى مرحلة التخرج، مما قد يخفي زمن استجابة خطأ توقع مسار التفرع.
محطات الحجز
هذا هو النمط المستخدم في قسم الأعداد الصحيحة في تصميمات AMD K7 و K8.
في مرحلة إعادة التسمية، يُبحث عن كل سجل معماري مُشار إليه للقراءة في كلٍ من ملف المستقبل المُفهرس معماريًا وملف إعادة التسمية. تُعطي قراءة ملف المستقبل قيمة ذلك السجل، إذا لم تكن هناك تعليمات معلقة للكتابة إليه (أي أنه جاهز). عند وضع التعليمات في قائمة انتظار الإصدار، تُكتب القيم المقروءة من ملف المستقبل في الإدخالات المُقابلة في محطات الحجز. تُؤدي عمليات كتابة السجلات في التعليمات إلى كتابة علامة جديدة غير جاهزة في ملف إعادة التسمية. عادةً ما يتم تخصيص رقم العلامة بشكل تسلسلي حسب ترتيب التعليمات - لا حاجة إلى FIFO للعلامات الحرة.
كما هو الحال في نظام الفهرسة بالعلامات، تنتظر قوائم الانتظار حتى ترى المعاملات غير الجاهزة بثّ العلامات المطابقة. وعلى عكس نظام الفهرسة بالعلامات، تؤدي العلامات المطابقة إلى كتابة قيمة البثّ المقابلة في محطة الحجز الخاصة بإدخال قائمة الانتظار.
تقرأ التعليمات الصادرة وسائطها من محطة الحجز، وتتجاوز المعاملات التي تم بثها مباشرة، ثم تُنفذ. وكما ذُكر سابقًا، فإن ملفات سجلات محطة الحجز عادةً ما تكون صغيرة، وتحتوي على ثمانية إدخالات تقريبًا.
يتم كتابة نتائج التنفيذ إلى مخزن إعادة الترتيب ، وإلى محطات الحجز (إذا كان إدخال قائمة الانتظار يحتوي على علامة مطابقة)، وإلى ملف المستقبل إذا كانت هذه هي التعليمات الأخيرة التي تستهدف سجل البنية (في هذه الحالة يتم وضع علامة جاهزية على السجل).
تقوم عملية التدرج بنسخ القيمة من مخزن إعادة الترتيب إلى ملف سجل البنية. والغرض الوحيد من ملف سجل البنية هو التعافي من الاستثناءات وتوقعات التفرعات الخاطئة.
تؤدي الاستثناءات وتوقعات التفرع الخاطئة، التي يتم اكتشافها عند التخرج، إلى نسخ ملف البنية إلى ملف المستقبل، ووضع علامة "جاهز" على جميع السجلات في ملف إعادة التسمية. عادةً لا توجد طريقة لإعادة بناء حالة ملف المستقبل لبعض التعليمات الوسيطة بين فك التشفير والتخرج، وبالتالي لا توجد عادةً طريقة للتعافي المبكر من توقعات التفرع الخاطئة.
مقارنة بين المخططات
في كلا النظامين، تُضاف التعليمات بالتسلسل إلى قوائم الانتظار، ولكنها تُزال بترتيب مختلف. إذا لم تُغلق قوائم الانتظار الخانات الفارغة، فستحتوي إما على العديد من المدخلات غير المستخدمة، أو ستتطلب نوعًا من ترميز الأولوية المتغيرة عندما تكون عدة تعليمات جاهزة للتنفيذ في الوقت نفسه. تتميز قوائم الانتظار التي تُغلق الخانات الفارغة بترميز أولوية أبسط، ولكنها تتطلب دوائر بسيطة ولكنها كبيرة الحجم لتمرير التعليمات عبر قائمة الانتظار.
تتميز محطات الحجز بزمن استجابة أفضل من إعادة التسمية إلى التنفيذ، لأن مرحلة إعادة التسمية تجد قيم السجلات مباشرةً، بدلاً من البحث عن رقم السجل الفعلي ثم استخدامه للعثور على القيمة. يظهر هذا التأخير كجزء من زمن استجابة التنبؤ الخاطئ للتفرع.
تتميز محطات الحجز بزمن استجابة أفضل بين إصدار التعليمات وتنفيذها، لأن كل ملف سجل محلي أصغر حجمًا من الملف المركزي الكبير في نظام الفهرسة بالعلامات. كما أن توليد العلامات ومعالجة الاستثناءات أبسط في نظام محطات الحجز، كما سيتم توضيحه لاحقًا.
عادةً ما تقوم ملفات السجلات المادية المستخدمة في محطات الحجز بدمج الإدخالات غير المستخدمة بالتوازي مع قائمة انتظار الإصدار التي تخدمها، مما يجعل هذه الملفات أكبر حجمًا إجمالًا، وتستهلك طاقة أكبر، وأكثر تعقيدًا من ملفات السجلات الأبسط المستخدمة في نظام الفهرسة بالعلامات. والأسوأ من ذلك، أنه يمكن كتابة كل إدخال في كل محطة حجز بواسطة كل ناقل نتائج، بحيث أن جهاز محطة حجز يحتوي، على سبيل المثال، على 8 إدخالات في قائمة انتظار الإصدار لكل وحدة وظيفية، سيحتوي عادةً على 9 أضعاف عدد شبكات التجاوز الموجودة في جهاز مكافئ يعمل بنظام الفهرسة بالعلامات. ونتيجةً لذلك، يستهلك توجيه النتائج طاقة ومساحة أكبر بكثير مما هو عليه في تصميم الفهرسة بالعلامات.
علاوة على ذلك، يحتوي نظام محطة الحجز على أربعة مواقع لتخزين قيمة النتيجة (ملف المستقبل، محطة الحجز، مخزن إعادة الترتيب، والملف المعماري)، بينما يحتوي نظام الفهرسة بالعلامات على موقع واحد فقط (ملف السجل الفعلي). ولأن نتائج الوحدات الوظيفية، التي تُبث إلى جميع مواقع التخزين هذه، يجب أن تصل إلى عدد أكبر بكثير من المواقع في الجهاز مقارنةً بنظام الفهرسة بالعلامات، فإن هذه الوظيفة تستهلك طاقة ومساحة ووقتًا أكبر. مع ذلك، في الأجهزة المجهزة بأنظمة تنبؤ تفرع دقيقة للغاية، وإذا كانت زمن استجابة التنفيذ مصدر قلق رئيسي، يمكن لمحطات الحجز أن تعمل بكفاءة ملحوظة.
تاريخ
كان جهاز IBM System/360 Model 91 جهازًا مبكرًا يدعم تنفيذ التعليمات خارج الترتيب؛ وقد استخدم خوارزمية توماسولو ، التي تستخدم إعادة تسمية السجلات.
يُعدّ معالج POWER1 من عام 1990 أول معالج دقيق يستخدم إعادة تسمية السجلات والتنفيذ خارج الترتيب. وقد طبّق هذا المعالج إعادة تسمية السجلات فقط لتحميل الأعداد العشرية. ولأنّ POWER1 كان يحتوي على وحدة معالجة أعداد عشرية واحدة فقط، لم تكن هناك حاجة لاستخدام إعادة التسمية لتعليمات الأعداد العشرية باستثناء عمليات الذاكرة. أما معالج POWER2 فكان يحتوي على وحدات معالجة أعداد عشرية متعددة، لذا استُخدمت إعادة التسمية لجميع تعليمات الأعداد العشرية. [ 1 ]
لم يكن تصميم R10000 الأصلي مزودًا بقوائم انتظار قابلة للانهيار أو ترميز ذي أولوية متغيرة، مما أدى إلى معاناته من مشاكل نقص الموارد - حيث لم تكن تُنفذ أقدم تعليمة في قائمة الانتظار أحيانًا إلا بعد توقف فك ترميز التعليمات تمامًا بسبب نقص سجلات إعادة التسمية، وبعد تنفيذ جميع التعليمات الأخرى. استخدمت المراجعات اللاحقة للتصميم، بدءًا من R12000، مُشفِّرًا ذا أولوية متغيرة جزئيًا للتخفيف من هذه المشكلة.
لم تكن الأجهزة القديمة التي تعمل بنظام إيقاف التشغيل تفصل بين وظائف إعادة التسمية وتخزين ROB/PRF. بل إن بعض الأجهزة الأولى، مثل RUU من تصميم سوهي أو Metaflow DCAF، جمعت بين الجدولة وإعادة التسمية والتخزين في بنية واحدة.
تُجري معظم الأجهزة الحديثة عملية إعادة التسمية عن طريق فهرسة جدول الخرائط في ذاكرة الوصول العشوائي (RAM) باستخدام رقم السجل المنطقي. على سبيل المثال، كان برنامج P6 يفعل ذلك؛ وستفعل الملفات المستقبلية ذلك أيضًا، مع تخزين البيانات في نفس البنية.
مع ذلك، استخدمت الأجهزة السابقة ذاكرة قابلة للعنونة بالمحتوى (CAM) في برنامج إعادة التسمية. على سبيل المثال، استخدم برنامج HPSM RAT، أو جدول أسماء السجلات البديلة، ذاكرة CAM على رقم السجل المنطقي بالاشتراك مع إصدارات مختلفة من السجل.
في نواحٍ عديدة، تتلخص قصة البنية الدقيقة غير المتسلسلة في كيفية التخلص التدريجي من وحدات الذاكرة المخصصة (CAMs). وحدات الذاكرة المخصصة الصغيرة مفيدة، أما الكبيرة فهي غير عملية.
كانت بنية P6 الدقيقة أول بنية دقيقة من إنتل تُطبّق كلاً من التنفيذ خارج الترتيب وإعادة تسمية السجلات. استُخدمت هذه البنية في معالجات Pentium Pro وPentium II وPentium III وPentium M وCore وCore 2. أما معالج Cyrix M1 ، الذي صدر في 2 أكتوبر 1995، [ 2 ] فكان أول معالج x86 يستخدم إعادة تسمية السجلات والتنفيذ خارج الترتيب. كما تميّزت معالجات x86 أخرى (مثل NexGen Nx686 و AMD K5 ) التي صدرت عام 1996 بإعادة تسمية السجلات والتنفيذ خارج الترتيب لعمليات RISC الدقيقة (بدلاً من تعليمات x86 الأصلية). [ 3 ] [ 4 ]
مراجع
- ↑ سيمو، د. (سبتمبر-أكتوبر 2000). "مساحة تصميم تقنيات إعادة تسمية السجلات" (ملف PDF) . IEEE Micro . 20 (5). IEEE: 70-83 . doi : 10.1109/40.877952 .
- ↑ "معالج Cyrix 6x86" . مؤرشف من الأصل بتاريخ 2023-01-09.
- ↑ "الجيل القادم: تفاصيل تقنية معالج Nx686 من الجيل السادس" (بيان صحفي).
- ↑ "100 ميجاهرتز وما بعدها" . مجلة الكمبيوتر الشخصي . 13 (21). زيف ديفيس: 172. 1994-12-06. ISSN 0888-8507 .
- سميث، جيه إي ؛ بليزكون، إيه آر (يونيو 1985). "تنفيذ المقاطعات الدقيقة في المعالجات ذات البنية الأنبوبية". أخبار هندسة الحاسوب من ACM SIGARCH . 13 (3): 36-44 . doi : 10.1145/327070.327125 . S2CID 6616701 .
- سميث، جيه إي ؛ بليزكون، إيه آر (مايو 1988). "تنفيذ المقاطعات الدقيقة في المعالجات ذات البنية الأنبوبية". مجلة IEEE للمعاملات الحاسوبية 37 (5): 562-573 . doi : 10.1109/12.4607 .
- سميث، جيه إي ؛ بليزكون، إيه آر (1998). "تنفيذ المقاطعات الدقيقة في المعالجات ذات البنية الأنبوبية" . 25 عامًا من الندوات الدولية حول هندسة الحاسوب (أوراق مختارة) - ISCA '98 . الصفحات 291-299 . doi : 10.1145/285930.285988 . ISBN 1581130589.
- هندسة الحاسوب
