خط أنابيب RISC الكلاسيكي

في تاريخ أجهزة الحاسوب ، استخدمت بعض وحدات المعالجة المركزية المبكرة ذات مجموعة التعليمات المختصرة (RISC CPUs) حلاً معمارياً مشابهاً جداً، يُعرف الآن باسم خط أنابيب RISC الكلاسيكي . ومن بين هذه الوحدات: MIPS و SPARC وMotorola 88000 ، ولاحقاً وحدة المعالجة المركزية DLX التي تم ابتكارها لأغراض تعليمية.

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

خط أنابيب RISC الكلاسيكي ذو المراحل الخمس

تتكون بنية خط الأنابيب الأساسية في معالج RISC من خمس مراحل (IF = جلب التعليمات ، ID = فك تشفير التعليمات، EX = التنفيذ، MEM = الوصول إلى الذاكرة، WB = كتابة السجلات). يمثل المحور الرأسي عدد التعليمات المتتالية، بينما يمثل المحور الأفقي الزمن. لذا، في العمود الأخضر، تكون أول تعليمة في مرحلة كتابة السجلات، بينما تكون آخر تعليمة في مرحلة جلب التعليمات.

جلب التعليمات

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

عداد البرنامج ( PC) هو سجلٌّ يخزن العنوان المُقدَّم إلى ذاكرة التعليمات. يُقدَّم هذا العنوان إلى ذاكرة التعليمات في بداية كل دورة. خلال الدورة، تُقرأ التعليمات من ذاكرة التعليمات، وفي الوقت نفسه، تُجرى عملية حسابية لتحديد قيمة عداد البرنامج التالية. تُحسب قيمة عداد البرنامج التالية بزيادة قيمة عداد البرنامج بمقدار 4، ثم يُختار ما إذا كان سيتم اعتماد هذه القيمة كقيمة عداد البرنامج التالية، أو اعتماد نتيجة عملية التفرع/القفز كقيمة عداد البرنامج التالية. تجدر الإشارة إلى أنه في معمارية RISC الكلاسيكية، جميع التعليمات لها نفس الطول. (هذا أحد الفروق بين معمارية RISC ومعمارية CISC [ 1 ] ). في تصميمات RISC الأصلية، يبلغ حجم التعليمات 4 بايت، لذا يُضاف دائمًا 4 إلى عنوان التعليمات، ولكن لا يُستخدم عداد البرنامج + 4 في حالة التفرع أو القفز أو الاستثناء (انظر التفرعات المؤجلة ، أدناه). (لاحظ أن بعض الأجهزة الحديثة تستخدم خوارزميات أكثر تعقيدًا ( توقع التفرع وتوقع هدف التفرع ) لتخمين عنوان التعليمات التالية).

فك تشفير التعليمات

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

تحتوي جميع تعليمات MIPS وSPARC وDLX على مدخلين من المسجلات كحد أقصى. خلال مرحلة فك التشفير، يتم تحديد فهارس هذين المسجلين داخل التعليمات، ثم تُقدَّم هذه الفهارس إلى ذاكرة المسجلات كعنوان. وبالتالي، تتم قراءة المسجلين المذكورين من ملف المسجلات . في تصميم MIPS، كان ملف المسجلات يحتوي على 32 مدخلاً.

في الوقت نفسه الذي تُقرأ فيه ملفات التسجيل، تحدد منطق إصدار التعليمات في هذه المرحلة ما إذا كان خط الأنابيب جاهزًا لتنفيذ التعليمات في هذه المرحلة. إذا لم يكن كذلك، فإن منطق الإصدار يتسبب في توقف كل من مرحلة جلب التعليمات ومرحلة فك التشفير. في دورة التوقف، لا تقبل قلابات الإدخال بتات جديدة، وبالتالي لا تُجرى أي حسابات جديدة خلال تلك الدورة.

إذا كانت التعليمة المُفكَّكة عبارة عن تفرع أو قفزة، يُحسب عنوان الوجهة للتفرع أو القفزة بالتوازي مع قراءة ملف السجلات. تُحسب حالة التفرع في الدورة التالية (بعد قراءة ملف السجلات)، وإذا تم تنفيذ التفرع أو إذا كانت التعليمة قفزة، يُخصص عنوان الوجهة لعداد البرنامج (PC) في المرحلة الأولى، بدلاً من قيمة عداد البرنامج المُحسوبة. استخدمت بعض البنى وحدة الحساب والمنطق (ALU) في مرحلة التنفيذ، على حساب انخفاض طفيف في إنتاجية التعليمات.

تطلّبت مرحلة فك التشفير استخدامًا مكثفًا للأجهزة: إذ يسمح معالج MIPS بالتفرع إذا تساوى سجلان، لذا يتم تشغيل شجرة AND بعرض 32 بت بشكل متسلسل بعد قراءة ملف السجلات، مما يُطيل المسار الحرج لهذه المرحلة (مما يعني عددًا أقل من الدورات في الثانية). كما تتطلب عملية حساب هدف التفرع عادةً عملية جمع 16 بت وزيادة 14 بت. وقد مكّن حلّ التفرع في مرحلة فك التشفير من تقليل عقوبة التنبؤ الخاطئ للتفرع إلى دورة واحدة فقط. ونظرًا لكثرة عمليات التفرع (وبالتالي التنبؤ الخاطئ بها)، كان من الضروري جدًا الحفاظ على هذه العقوبة منخفضة.

ينفذ

تُجرى العمليات الحسابية الفعلية في مرحلة التنفيذ. تتكون هذه المرحلة عادةً من وحدة حسابية ومنطقية (ALU)، بالإضافة إلى وحدة إزاحة بتية. وقد تشمل أيضًا وحدة ضرب وقسمة متعددة الدورات.

تتولى وحدة الحساب والمنطق (ALU) مسؤولية إجراء العمليات المنطقية (و، أو، لا، NAND، NOR، XOR، XNOR) بالإضافة إلى إجراء عمليات الجمع والطرح للأعداد الصحيحة. إلى جانب النتيجة، توفر وحدة الحساب والمنطق عادةً بتات الحالة، مثل ما إذا كانت النتيجة صفرًا أم لا، أو ما إذا حدث تجاوز في سعة النظام.

يُعد مُبدِّل البتات مسؤولاً عن عمليات الإزاحة والتدوير.

يمكن تقسيم التعليمات على هذه الآلات البسيطة من نوع RISC إلى ثلاث فئات زمن استجابة وفقًا لنوع العملية:

  • عملية التسجيل (زمن استجابة دورة واحدة): عمليات الجمع والطرح والمقارنة والعمليات المنطقية. خلال مرحلة التنفيذ، يتم إدخال الوسيطين إلى وحدة حساب ومنطق بسيطة، والتي تُنتج النتيجة في نهاية مرحلة التنفيذ.
  • مرجع الذاكرة (زمن استجابة دورتين). جميع عمليات التحميل تتم من الذاكرة. خلال مرحلة التنفيذ، تقوم وحدة الحساب والمنطق (ALU) بإضافة الوسيطين (مسجل وإزاحة ثابتة) لإنتاج عنوان افتراضي بنهاية الدورة.
  • تعليمات متعددة الدورات (زمن استجابة طويل). تشمل هذه التعليمات عمليات ضرب وقسمة الأعداد الصحيحة وجميع عمليات الفاصلة العائمة . خلال مرحلة التنفيذ، تُمرر معاملات هذه العمليات إلى وحدة الضرب/القسمة متعددة الدورات. بينما تستمر بقية أجزاء خط المعالجة في التنفيذ، تقوم وحدة الضرب/القسمة بعملها. ولتجنب تعقيد مرحلة الكتابة ومنطق الإصدار، تكتب التعليمات متعددة الدورات نتائجها في مجموعة منفصلة من السجلات.

الوصول إلى الذاكرة

إذا كانت هناك حاجة للوصول إلى ذاكرة البيانات، فسيتم ذلك في هذه المرحلة.

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

بالنسبة لتخزين البيانات المباشر والبيانات الموسومة افتراضياً، وهو أبسط أنواع تنظيمات تخزين البيانات المتعددة ، يتم استخدام ذاكرتي SRAM ، إحداهما لتخزين البيانات والأخرى لتخزين العلامات.

رد الكتابة

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

المخاطر

صاغ هينيسي وباترسون مصطلح الخطر للحالات التي تؤدي فيها التعليمات في خط الأنابيب إلى إجابات خاطئة.

المخاطر الهيكلية

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

مخاطر البيانات

تحدث مخاطر البيانات عندما تحاول إحدى التعليمات، التي يتم جدولتها بشكل أعمى، استخدام البيانات قبل أن تصبح البيانات متاحة في ملف التسجيل.

في خط أنابيب RISC الكلاسيكي، يتم تجنب مخاطر البيانات بإحدى طريقتين:

الحل أ. التجاوز

يُعرف التجاوز أيضًا باسم توجيه المعاملات .

لنفترض أن وحدة المعالجة المركزية تقوم بتنفيذ جزء الكود التالي:

SUB r3 , r4 -> r10 ; يكتب r3 - r4 إلى r10 AND r10 , r3 -> r11 ; يكتب r10 و r3 إلى r11

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

في مسار بيانات بسيط ، وبدون مراعاة المخاطر، تتطور مخاطر البيانات على النحو التالي:

في الدورة الثالثة، SUBتحسب التعليمة القيمة الجديدة لـ r10. وفي الدورة نفسها، ANDيتم فك تشفير العملية، وتُسترجع قيمة r10من ملف المسجلات. مع ذلك، SUBلم تكتب التعليمة نتيجتها إلى بعد r10. عادةً ما تتم كتابة هذه النتيجة في الدورة الخامسة (المربع الأخضر). لذا، فإن القيمة المقروءة من ملف المسجلات والمُمررة إلى وحدة الحساب والمنطق (في مرحلة التنفيذ من العملية AND، المربع الأحمر) غير صحيحة.

بدلاً من ذلك، يجب إعادة البيانات التي تم حسابها SUBإلى مرحلة التنفيذ (أي إلى الدائرة الحمراء في الرسم التوضيحي) قبلAND كتابتها . يكمن حل هذه المشكلة في استخدام زوج من مُضاعِفات الإرسال الالتفافية. تقع هذه المُضاعِفات في نهاية مرحلة فك التشفير، وتُستخدم مُخرجاتها المُحوَّلة كمدخلات لوحدة الحساب والمنطق. يختار كل مُضاعِف إرسال بين:

  1. منفذ قراءة ملف التسجيل (أي مخرج مرحلة فك التشفير، كما هو الحال في خط الأنابيب البسيط): سهم أحمر
  2. مسار التسجيل الحالي لوحدة الحساب والمنطق (للتجاوز بمرحلة واحدة): السهم الأزرق
  3. مسار التسجيل الحالي لمرحلة الوصول (وهو إما قيمة مُحمّلة أو نتيجة وحدة الحساب والمنطق المُعاد توجيهها، مما يُتيح تجاوز مرحلتين): السهم البنفسجي . لاحظ أن هذا يتطلب تمرير البيانات عكسيًا في الزمن بمقدار دورة واحدة. في حال حدوث ذلك، يجب إدخال فاصل زمني مؤقت لإيقاف ANDالعملية مؤقتًا حتى تصبح البيانات جاهزة.

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

لاحظ أن البيانات لا يمكن تمريرها إلا للأمام زمنيًا، ولا يمكن إعادتها إلى مرحلة سابقة إذا لم تتم معالجتها بعد. في المثال أعلاه، يتم تمرير البيانات للأمام (بحلول الوقت الذي ANDتصبح فيه البيانات جاهزة للتسجيل في وحدة الحساب والمنطق، تكون SUBقد تمت معالجتها بالفعل).

الحل ب. نظام تعشيق خط الأنابيب

ومع ذلك، يرجى مراعاة التعليمات التالية:

LD adr -> r10 AND r10 , r3 -> r11

adrلا تُخزَّن البيانات المقروءة من العنوان في ذاكرة التخزين المؤقت للبيانات إلا بعد مرحلة الوصول إلى الذاكرة من LDالتعليمات. في هذه المرحلة، ANDتكون التعليمات قد وصلت بالفعل إلى وحدة الحساب والمنطق (ALU). يتطلب حل هذه المشكلة إعادة تمرير البيانات من الذاكرة إلى مدخلات وحدة الحساب والمنطق بشكل عكسي، وهو أمر غير ممكن. الحل هو تأخير التعليمات دورة واحدة. يتم اكتشاف خطر البيانات في مرحلة فك التشفير، فتتوقفAND مرحلتا الجلب وفك التشفير مؤقتًا ، مما يمنعهما من تغيير مدخلاتهما، وبالتالي تبقيان في الحالة نفسها لدورة واحدة. تشهد مراحل التنفيذ والوصول والكتابة اللاحقة إضافة تعليمة "لا عملية" (NOP) بين التعليمات .LDAND

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

العودة إلى الوراء في الزمنتم حل المشكلة باستخدام فقاعة

لا يُشترط استخدام آلية تعشيق خط الأنابيب مع أي عملية إعادة توجيه بيانات. يمكن حل المثال الأول (المتبوع SUBبـ) ANDوالمثال الثاني ( LDالمتبوع بـ) ANDعن طريق إيقاف المرحلة الأولى مؤقتًا لثلاث دورات حتى تتم عملية الكتابة، وتكون البيانات في ملف التسجيل صحيحة، مما يسمح لمرحلة فك التشفير (Decode) بجلب قيمة التسجيل الصحيحة AND. يُؤدي هذا إلى انخفاض ملحوظ في الأداء، حيث يقضي المعالج وقتًا طويلًا في معالجة بيانات غير مُعالجة، ولكن يمكن زيادة سرعة الساعة نظرًا لقلة منطق إعادة التوجيه الذي ينتظره المعالج.

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

السيطرة على المخاطر

تنشأ مخاطر التحكم من التفرع المشروط وغير المشروط. يقوم خط أنابيب RISC الكلاسيكي بحل التفرعات في مرحلة فك التشفير، مما يعني أن تكرار حل التفرع يستغرق دورتين. وهناك ثلاثة آثار مترتبة على ذلك:

  • تمر عملية تكرار حل الفرع بالكثير من الدوائر: قراءة ذاكرة التخزين المؤقت للتعليمات، وقراءة ملف التسجيل، وحساب شرط الفرع (الذي يتضمن مقارنة 32 بت على وحدات المعالجة المركزية MIPS)، ومضاعف عنوان التعليمات التالي.
  • نظرًا لأن أهداف التفرع والقفز تُحسب بالتوازي مع قراءة السجل، فإنّ معمارية RISC لا تحتوي عادةً على تعليمات تتفرع إلى سجل + عنوان إزاحة. مع ذلك، فإنّ القفز إلى سجل مدعوم.
  • في أي عملية تفرع، يتم دائمًا جلب التعليمة التي تلي التفرع مباشرةً من ذاكرة التخزين المؤقت للتعليمات. إذا تم تجاهل هذه التعليمة، فستكون هناك عقوبة دورة واحدة لكل عملية تفرع يتم تنفيذها ، وهي عقوبة كبيرة بما يكفي.

هناك أربع طرق لحل مشكلة الأداء هذه باستخدام الفروع:

  • توقع عدم التنفيذ: يتم جلب التعليمة التي تلي التفرع من ذاكرة التخزين المؤقت للتعليمات دائمًا، ولكن لا يتم تنفيذها إلا إذا لم يتم تنفيذ التفرع. إذا لم يتم تنفيذ التفرع، يبقى خط الأنابيب ممتلئًا. أما إذا تم تنفيذ التفرع، فتُحذف التعليمة (تُعلّم كما لو كانت تعليمة NOP)، وتُفقد فرصة دورة واحدة لإنهاء التعليمة.
  • التفرع المحتمل: يتم جلب التعليمة التالية للتفرع من ذاكرة التخزين المؤقت للتعليمات دائمًا، ولكن يتم تنفيذها فقط في حال تم تنفيذ التفرع. يمكن للمترجم دائمًا ملء خانة تأخير التفرع في مثل هذا التفرع، وبما أن التفرعات تُنفذ في أغلب الأحيان، فإن هذا النوع من التفرعات يُسبب تكلفة أقل في دورة تنفيذ التعليمات مقارنةً بالنوع السابق.
  • خانة تأخير التفرع : بناءً على تصميم التفرع المؤجل وشروطه، يُحدد ما إذا كانت التعليمة التي تلي تعليمة التفرع مباشرةً ستُنفذ حتى في حال تنفيذ التفرع. بدلاً من تحمل عقوبة على عدد التعليمات المنفذة في الدورة (IPC) لنسبة معينة من التفرعات المنفذة (ربما 60%) أو غير المنفذة (ربما 40%)، تتحمل خانات تأخير التفرع عقوبة على عدد التعليمات المنفذة في الدورة (IPC) لتلك التفرعات التي لم يتمكن المترجم من جدولة خانة التأخير فيها. وقد صمم مصممو معالجات SPARC وMIPS وMC88K خانة تأخير التفرع ضمن مجموعات تعليماتهم (ISA).
  • التنبؤ بالتفرع : بالتوازي مع جلب كل تعليمة، يتم تخمين ما إذا كانت التعليمة تفرعًا أم قفزة، وإذا كانت كذلك، يتم تخمين الهدف. في الدورة التي تلي التفرع أو القفزة، يتم جلب التعليمة من الهدف المُخمّن. عندما يكون التخمين خاطئًا، يتم مسح الهدف الذي تم جلبه بشكل خاطئ.

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

تعرضت الفروع المتأخرة لانتقادات باعتبارها خياراً سيئاً على المدى القصير في تصميم ISA:

  • عادة ما تواجه المترجمات بعض الصعوبة في العثور على تعليمات مستقلة منطقيًا لوضعها بعد التفرع (تسمى التعليمات التي تلي التفرع خانة التأخير)، لذلك يجب عليهم إدراج تعليمات NOP في خانات التأخير.
  • لا تستفيد المعالجات فائقة التوازي ، التي تستجلب تعليمات متعددة في الدورة الواحدة وتتطلب نوعًا من التنبؤ بالتفرع، من التفرعات المؤجلة. وقد استبعدت مجموعة تعليمات ألفا (Alpha ISA) التفرعات المؤجلة، لأنها صُممت خصيصًا للمعالجات فائقة التوازي.
  • إنّ أبرز عيوب التفرعات المؤجلة هو تعقيد التحكم الإضافي الذي تنطوي عليه. فإذا حدث استثناء أثناء تنفيذ تعليمة التأخير، يجب إعادة تشغيل المعالج عند نقطة التفرع، وليس عند تنفيذ التعليمة التالية. وبالتالي، فإنّ للاستثناءات عنوانين أساسيين: عنوان الاستثناء وعنوان إعادة التشغيل، وقد شكّل توليد هذين العنوانين والتمييز بينهما بشكل صحيح في جميع الحالات مصدرًا للأخطاء في التصاميم اللاحقة.

الاستثناءات

لنفترض أن معالج RISC ذو 32 بت يقوم بمعالجة تعليمة ADD التي تجمع عددين كبيرين، والنتيجة لا تتناسب مع 32 بت.

أبسط الحلول، التي توفرها معظم البنى، هي حساب الالتفاف. تُحذف البتات الأكثر أهمية من الأعداد التي تتجاوز القيمة القصوى الممكنة للترميز حتى تتناسب مع القيمة. في نظام الأعداد الصحيحة المعتاد، 3000000000 + 3000000000 = 6000000000. باستخدام حساب الالتفاف غير المُوَقَّع ذي 32 بت، 3000000000 + 3000000000 = 1705032704 (6000000000 mod 2^32). قد لا يبدو هذا مفيدًا للغاية. تكمن أكبر فائدة لحساب الالتفاف في أن لكل عملية نتيجة محددة بدقة.

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

إن أكثر أنواع الاستثناءات التي يمكن رؤيتها بواسطة البرامج شيوعًا على أحد أجهزة RISC الكلاسيكية هو خطأ TLB .

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

لتسهيل (وتسريع) عملية إصلاح البرنامج للمشكلة وإعادة تشغيله، يجب على وحدة المعالجة المركزية (CPU) تسجيل استثناء دقيق. الاستثناء الدقيق يعني أن جميع التعليمات حتى تعليمة الاستثناء قد نُفذت، وأن تعليمة الاستثناء وكل ما يليها لم يُنفذ.

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

سوء التعامل مع ذاكرة التخزين المؤقت

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

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

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

انظر أيضاً

مراجع

  1. باترسون، ديفيد (12 مايو 1981). "RISC I: حاسوب VLSI ذو مجموعة تعليمات مُصغّرة" . Isca '81. ص 443-457 . 
  2. باترسون، ديفيد (12 مايو 1981). "RISC I: حاسوب VLSI ذو مجموعة تعليمات مُصغّرة" . Isca '81. ص 443-457 .