مُتنبئ التفرع
في هندسة الحاسوب ، يُعدّ مُتنبئ التفرع [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] دائرة رقمية تُحاول التنبؤ بمسار التفرع (مثل بنية if-then-else ) قبل معرفة ذلك بشكل قاطع. يهدف مُتنبئ التفرع إلى تحسين تدفق التعليمات في خط الأنابيب . ويلعب دورًا حاسمًا في تحقيق أداء عالٍ في العديد من بنى المعالجات الدقيقة الحديثة ذات خطوط الأنابيب .

عادةً ما يتم تنفيذ التفرع ثنائي الاتجاه باستخدام تعليمة القفز المشروط . يمكن تنفيذ القفزة المشروطة والانتقال إلى موقع مختلف في ذاكرة البرنامج، أو يمكن عدم تنفيذها ومتابعة التنفيذ مباشرةً بعد القفزة المشروطة. لا يُعرف على وجه اليقين ما إذا كانت القفزة المشروطة ستُنفذ أم لا حتى يتم حساب الشرط واجتياز القفزة المشروطة لمرحلة التنفيذ في مسار التعليمات (انظر الشكل 1).
بدون التنبؤ بالتفرع، سيضطر المعالج للانتظار حتى تنتهي تعليمة القفزة الشرطية من مرحلة التنفيذ قبل أن تتمكن التعليمة التالية من دخول مرحلة الجلب في خط الأنابيب. يحاول متنبئ التفرع تجنب هذا الهدر للوقت من خلال محاولة تخمين ما إذا كانت القفزة الشرطية هي الأرجح أم لا. ثم يتم جلب التفرع الذي تم تخمينه على أنه الأرجح وتنفيذه بشكل تخميني . إذا تبين لاحقًا أن التخمين كان خاطئًا، فسيتم تجاهل التعليمات التي تم تنفيذها بشكل تخميني أو جزئي، ويبدأ خط الأنابيب من جديد بالتفرع الصحيح، مما يتسبب في تأخير.
يُعادل الوقت الضائع في حالة التنبؤ الخاطئ بالتفرع عدد المراحل في خط المعالجة، بدءًا من مرحلة الجلب وحتى مرحلة التنفيذ. تميل المعالجات الدقيقة الحديثة إلى امتلاك خطوط معالجة طويلة نسبيًا، بحيث يتراوح تأخير التنبؤ الخاطئ بين 10 و20 دورة ساعة . ونتيجةً لذلك، فإن زيادة طول خط المعالجة يزيد من الحاجة إلى مُتنبئ تفرع أكثر تطورًا. [ 6 ]
عند مواجهة تعليمة قفزة شرطية لأول مرة، لا تتوفر معلومات كافية للتنبؤ. مع ذلك، يحتفظ متنبئ التفرعات بسجلات لما إذا كانت التفرعات قد نُفذت أم لا، لذا عندما يصادف قفزة شرطية سبق رؤيتها عدة مرات، يمكنه الاستناد إلى السجل التاريخي للتنبؤ. على سبيل المثال، قد يلاحظ متنبئ التفرعات أن القفزة الشرطية تُنفذ في أغلب الأحيان، أو أنها تُنفذ في كل مرة ثانية.
لا يُعدّ التنبؤ بالتفرع مرادفًا للتنبؤ بهدف التفرع . فالتنبؤ بالتفرع يحاول تخمين ما إذا كان سيتم تنفيذ قفزة مشروطة أم لا. أما التنبؤ بهدف التفرع فيحاول تخمين هدف القفزة، سواءً كانت مشروطة أو غير مشروطة، قبل حسابها من خلال فك تشفير التعليمات وتنفيذها. غالبًا ما يتم دمج التنبؤ بالتفرع والتنبؤ بهدف التفرع في نفس الدائرة الإلكترونية.
تطبيق
التنبؤ بالتفرع الثابت
يُعدّ التنبؤ الثابت أبسط تقنيات التنبؤ بالتفرعات، لأنه لا يعتمد على معلومات حول تاريخ تنفيذ التعليمات البرمجية. بل يتنبأ بنتيجة التفرع بناءً على تعليمة التفرع فقط. [ 7 ] استخدمت التطبيقات المبكرة لمعالجات SPARC و MIPS (وهما من أوائل معمارية RISC التجارية ) التنبؤ الثابت بالتفرعات أحادي الاتجاه: إذ تتنبأ دائمًا بعدم تنفيذ القفزة الشرطية، وبالتالي تستجلب دائمًا التعليمة التسلسلية التالية. وعندما يتم تقييم التفرع أو القفزة والتأكد من تنفيذها، يتم تعيين مؤشر التعليمة إلى عنوان غير تسلسلي.
تستجلب كلتا المعالجتين التعليمات في دورة واحدة، وتقيّمان التفرعات في مرحلة فك التشفير. ونتيجةً لذلك، تستغرق دورة تكرار هدف التفرع دورتين، ويستجلب الجهاز دائمًا التعليمات مباشرةً بعد أي تفرع مُتخذ. وتُحدد كلتا البنيتين فترات تأخير التفرع للاستفادة من هذه التعليمات المستجلبة.
يفترض شكلٌ أكثر تطورًا من التنبؤ الثابت أن الفروع العكسية ستُنفذ، بينما لن تُنفذ الفروع الأمامية. (الفرع العكسي هو الفرع الذي يكون عنوانه المستهدف أقل من عنوانه). تزيد هذه القاعدة من دقة التنبؤ في الحلقات، التي يمكن إنشاؤها بفرع عكسي في النهاية يُنفذ غالبًا، أو بفرع أمامي في البداية لا يُنفذ غالبًا. مع المعالجات التي تستخدم طريقة التنبؤ هذه، يُمكن لترتيب التعليمات أن يزيد من دقة التنبؤ بالفروع إلى أقصى حد. توصي مجموعة تعليمات RISC-V بتحسين البرامج المكتوبة لوحدات معالجة RISC-V (خيوط الأجهزة)، أو المُصممة للعمل على وحدات معالجة RISC-V، بافتراض أن الفروع العكسية تُنفذ، بينما لا تُنفذ الفروع الأمامية. (حتى عندما يتضمن المعالج مُتنبئًا أكثر تطورًا يُقلل من القيمة النسبية للتنبؤ الثابت). [ 8 ]
تقبل بعض المعالجات تلميحات التنبؤ بالتفرع التي تتجاوز التنبؤ الثابت. يقبل معالجا إنتل بنتيوم 4 وبنتيوم 4E تلميحات التنبؤ بالتفرع كبادئات. في ظل وجود التنبؤ الديناميكي، لا يُقدم التنبؤ الثابت أي فائدة تُذكر، وتجاوزه يُقلل من فائدته. تتجاهل معالجات إنتل اللاحقة بنتيوم إم وكور 2 بادئات تلميحات التنبؤ بالتفرع. [ 9 ] لم يُعد أي مُصنِّع لمعالجات x86 استخدام تلميحات التنبؤ.
تعتمد مُتنبئات الفروع الديناميكية بشكل طبيعي على التنبؤ الثابت بالفروع عندما لا تتوفر لديها معلومات مُخزنة مؤقتًا (مثل أول مرة يتم فيها مواجهة فرع معين). يعتمد كل من معالج Motorola MPC7450 (G4e) ومعالج Intel Pentium 4 على التنبؤ الثابت. [ 10 ]
في التنبؤ الثابت، يتم اتخاذ جميع القرارات في وقت الترجمة، قبل تنفيذ البرنامج. [ 11 ]
التنبؤ الديناميكي بالفروع
يستخدم التنبؤ الديناميكي بالفروع [ 2 ] معلومات حول الفروع التي تم اتخاذها أو لم يتم اتخاذها والتي يتم جمعها في وقت التشغيل للتنبؤ بنتيجة الفرع. [ 1 ]
التنبؤ بالتفرع العشوائي
يعني التنبؤ العشوائي بالفروع التخمين العشوائي لما إذا كان سيتم تنفيذ فرع معين في كل مرة. وتُعد تكلفة مولد الأرقام شبه العشوائية منخفضة مقارنةً بالتقنيات الأخرى. يضمن التنبؤ العشوائي معدل دقة 50%، وهو معدل لا يمكن زيادته أو إنقاصه بأي شكل من الأشكال. (ويجعل هذا التوقيت أكثر عشوائية من الطرق الأخرى). أما التنبؤ الثابت بالفروع (بافتراض تنفيذ الفروع الأمامية وعدم تنفيذ الفروع الخلفية) فيتنبأ بكل فرع بدقة تتراوح بين 0% و100%، مع معدل نجاح إجمالي يقع بينهما. من المرجح جدًا أن يعمل الكود غير المُحسَّن بنسبة نجاح تنبؤ أفضل من 50%، بل قد تصل إلى 90%. إذا قام المُصرِّف بإعادة ترتيب بعض التعليمات، فإن ذلك يزيد من معدل دقة التنبؤ بالفروع مقارنةً بالكود غير المُحسَّن. لقد تفوق التنبؤ الثابت بالفروع على التنبؤ العشوائي بالفروع منذ زمن بعيد. كما تفوق التنبؤ الديناميكي بالفروع على التنبؤ الثابت بالفروع وأصبح شائعًا، على الرغم من التعقيد الإضافي.
التنبؤ بالسطر التالي
تقوم بعض المعالجات فائقة التوازي (MIPS R8000 و Alpha 21264 و Alpha 21464 (EV8)) بجلب كل سطر من التعليمات مع مؤشر إلى السطر التالي. ويتولى هذا المؤشر التنبؤ بالهدف من التفرع بالإضافة إلى التنبؤ باتجاه التفرع.
عندما يشير مُتنبئ السطر التالي إلى مجموعات مُتراصفة من 2 أو 4 أو 8 تعليمات، فإن هدف التفرع عادةً لن يكون أول تعليمة يتم جلبها، وبالتالي تُهدر التعليمات الأولية التي تم جلبها. وبافتراض توزيع مُنتظم لأهداف التفرع، يتم تجاهل 0.5 و1.5 و3.5 تعليمة تم جلبها، على التوالي.
بما أن التفرع نفسه لن يكون عادةً آخر تعليمة في مجموعة مُحاذية، فسيتم تجاهل التعليمات التي تلي التفرع المُنفذ (أو خانة التأخير الخاصة به). ومرة أخرى، بافتراض توزيع منتظم لمواضع تعليمات التفرع، يتم تجاهل 0.5 و1.5 و3.5 تعليمة التي تم جلبها.
تصل التعليمات المهملة في خطوط التفرع والوجهة إلى دورة جلب كاملة تقريبًا، حتى بالنسبة لمتنبئ السطر التالي ذي الدورة الواحدة.
التنبؤ بالفرع ذي المستوى الواحد
عداد مشبع
يسجل عداد تشبع أحادي البت (وهو في الأساس قلاب ) النتيجة الأخيرة للتفرع. هذه أبسط نسخة ممكنة من متنبئ التفرع الديناميكي، على الرغم من أنها ليست دقيقة للغاية.
عداد التشبع ذو 2 بت [ 1 ] هو آلة حالة بأربع حالات:

- ممنوع تناوله بشدة
- لا يتم تناوله بشكل ضعيف
- تم تناوله بشكل ضعيف
- تم تناوله بقوة
عند تقييم أي فرع، يتم تحديث آلة الحالة المقابلة. الفروع التي تُقيّم على أنها غير مُنفذة تُغير الحالة نحو "غير مُنفذة بشكل قاطع"، والفروع التي تُقيّم على أنها مُنفذة تُغير الحالة نحو "مُنفذة بشكل قاطع". تكمن ميزة نظام العداد ثنائي البت على نظام العداد أحادي البت في أن القفزة الشرطية يجب أن تنحرف مرتين عن مسارها الأكثر تكرارًا قبل أن يتغير التوقع. على سبيل المثال، يتم التنبؤ بشكل خاطئ بقفزة شرطية لإغلاق حلقة مرة واحدة فقط بدلًا من مرتين.
يستخدم معالج Intel Pentium الأصلي غير المتوافق مع تقنية MMX عدادًا مشبعًا، وإن كان ذلك بتنفيذ غير مثالي. [ 9 ]
في معايير SPEC '89، تصل المتنبئات ثنائية النمط الكبيرة جدًا إلى حد التشبع عند نسبة دقة 93.5%، وذلك بمجرد أن يرتبط كل فرع بعداد فريد. [ 12 ] : 3
يتم فهرسة جدول التنبؤ باستخدام بتات عنوان التعليمات ، بحيث يمكن للمعالج جلب تنبؤ لكل تعليمة قبل فك تشفيرها.
مُتنبئ ثنائي المستوى
يستخدم مُتنبئ التفرع ثنائي المستوى، والذي يُشار إليه أيضًا باسم مُتنبئ التفرع القائم على الارتباط، جدولًا ثنائي الأبعاد للعدادات، يُسمى أيضًا "جدول تاريخ الأنماط". مدخلات الجدول عبارة عن عدادات ثنائية البت.
نموذج تنبؤي تكيفي ثنائي المستوى

إذا ifنُفِّذَت عبارةٌ ثلاث مرات، فقد يعتمد القرار المتخذ في التنفيذ الثالث على ما إذا نُفِّذَت العبارتان السابقتان أم لا. في مثل هذه الحالات، يعمل مُتنبئ تكيفي ثنائي المستوى بكفاءةٍ أعلى من عداد التشبع. لا يتنبأ عداد التشبع جيدًا بالقفزات الشرطية التي تُنفَّذ كل مرتين أو التي لها نمطٌ متكررٌ بانتظام. يتذكر المُتنبئ التكيفي ثنائي المستوى تاريخ آخر n من مرات حدوث الفرع، ويستخدم عداد تشبع واحدًا لكل نمطٍ من أنماط التاريخ المحتملة البالغ عددها 2n . يوضح الشكل 3 هذه الطريقة.
لنأخذ مثال n = 2. هذا يعني أن آخر ظهورين للتفرع يُخزّنان في مسجل إزاحة ثنائي البت . يمكن أن يحتوي مسجل تاريخ التفرع هذا على أربع قيم ثنائية مختلفة : 00، 01، 10، و11، حيث يعني الصفر "غير مُنفّذ" والواحد "مُنفّذ". يحتوي جدول تاريخ النمط على أربعة مدخلات لكل تفرع، مدخل واحد لكل من تواريخ التفرع الأربعة الممكنة (2² = 4)، ويحتوي كل مدخل في الجدول على عداد تشبع ثنائي البت من نفس النوع الموضح في الشكل 2 لكل تفرع. يُستخدم مسجل تاريخ التفرع لاختيار أي من عدادات التشبع الأربعة سيتم استخدامه. إذا كان التاريخ 00، فسيتم استخدام العداد الأول؛ وإذا كان التاريخ 11، فسيتم استخدام العداد الأخير من بين العدادات الأربعة.
لنفترض، على سبيل المثال، أن قفزة شرطية تُنفذ كل ثلاث مرات. تسلسل التفرع هو 001001001... في هذه الحالة، سينتقل المدخل رقم 00 في جدول سجل النمط إلى حالة "منفذ بقوة"، مما يشير إلى وجود واحد بعد صفرين. سينتقل المدخل رقم 01 إلى حالة "غير منفذ بقوة"، مما يشير إلى وجود صفر بعد 01. وينطبق الأمر نفسه على المدخل رقم 10، بينما لا يُستخدم المدخل رقم 11 مطلقًا لعدم وجود واحدين متتاليين.
القاعدة العامة للمتنبئ التكيفي ثنائي المستوى ذي التاريخ المكون من n بت هي أنه يستطيع التنبؤ بأي تسلسل متكرر بأي فترة إذا كانت جميع التسلسلات الفرعية المكونة من n بت مختلفة. [ 9 ]
تتميز خوارزمية التنبؤ التكيفية ثنائية المستوى بقدرتها على تعلم التنبؤ بنمط متكرر عشوائي بسرعة. وقد ابتكر هذه الطريقة كل من تي-واي ييه وييل بات في جامعة ميشيغان . [ 14 ] ومنذ نشرها لأول مرة عام 1991، لاقت هذه الطريقة رواجًا كبيرًا، حيث استُخدمت في معالجات بنتيوم اللاحقة، مثل بنتيوم إم إم إكس. [ 15 ] وتُستخدم نسخ معدلة من هذه الطريقة في معظم المعالجات الدقيقة الحديثة.
مُتنبئ عصبي ثنائي المستوى
تم اقتراح نموذج تنبؤي للفروع ثنائي المستوى حيث يتم استبدال المستوى الثاني بشبكة عصبية . [ 16 ]
التنبؤ بالفرع المحلي
يحتوي مُتنبئ التفرع المحلي على مخزن تاريخي منفصل لكل تعليمة قفز شرطية. وقد يستخدم مُتنبئًا تكيفيًا ثنائي المستوى. يكون المخزن التاريخي منفصلاً لكل تعليمة قفز شرطية، بينما قد يكون جدول تاريخ النمط منفصلاً أيضًا أو قد يكون مشتركًا بين جميع القفزات الشرطية.
تحتوي معالجات Intel Pentium MMX و Pentium II و Pentium III على متنبئات تفرع محلية مع سجل تاريخي محلي مكون من 4 بتات وجدول تاريخ نمط محلي يحتوي على 16 مدخلاً لكل قفزة شرطية.
في معايير SPEC '89، تصل دقة التنبؤات المحلية الكبيرة جدًا إلى حد التشبع عند 97.1%. [ 12 ] : 6
التنبؤ العالمي بالفروع
لا يحتفظ مُتنبئ الفروع العالمي بسجل تاريخي منفصل لكل قفزة شرطية، بل يحتفظ بسجل تاريخي مشترك لجميع القفزات الشرطية. وتكمن ميزة السجل المشترك في أن أي ترابط بين القفزات الشرطية المختلفة يُؤخذ في الاعتبار عند إجراء التنبؤات. أما عيبه، فهو أن السجل يتضاءل بمعلومات غير ذات صلة إذا كانت القفزات الشرطية المختلفة غير مترابطة، وأن مخزن السجل قد لا يتضمن أي بتات من الفرع نفسه إذا كان هناك العديد من الفروع الأخرى بينهما. وقد يستخدم مُتنبئًا تكيفيًا ثنائي المستوى.
لا تتفوق هذه الآلية على آلية العداد المشبع إلا في حالة الجداول الكبيرة، ونادرًا ما تكون بجودة التنبؤ المحلي. يجب أن يكون مخزن البيانات التاريخية أطول لتحقيق تنبؤ دقيق. يزداد حجم جدول تاريخ الأنماط بشكل أُسّي مع حجم مخزن البيانات التاريخية. لذا، يجب مشاركة جدول تاريخ الأنماط الكبير بين جميع القفزات الشرطية.
يُطلق على المُتنبئ التكيفي ثنائي المستوى، الذي يستخدم مخزنًا مؤقتًا للتاريخ وجدولًا لتاريخ الأنماط بشكل مشترك عالميًا، اسم "مُتنبئ gshare" إذا كان يُجري عملية XOR بين التاريخ العالمي وعداد البرنامج الخاص بالفروع، و"مُتنبئ gselect" إذا كان يُدمجهما . يُستخدم التنبؤ بالفروع العالمي في معالجات AMD ، وفي معالجات Intel Pentium M و Core و Core 2 و Atom المبنية على معمارية Silvermont .
التنبؤ بالفرع المخلوط
يجمع مُتنبئ التفرعات المُدمج [ 17 ] بين مبادئ التنبؤ المحلية والعالمية من خلال دمج سجلات التفرعات المحلية والعالمية، وربما مع بعض البتات من عداد البرنامج أيضًا. تشير الاختبارات إلى أن معالج VIA Nano قد يستخدم هذه التقنية. [ 9 ]
مُتنبئ الموافقة
المتنبئ المتفق هو متنبئ تكيفي ثنائي المستوى، مزود بمخزن بيانات تاريخي مشترك عالميًا وجدول تاريخ أنماط، بالإضافة إلى عداد تشبع محلي إضافي. تُجرى عملية XOR بين مخرجات المتنبئين المحلي والعالمي للحصول على التنبؤ النهائي. والهدف من ذلك هو تقليل التنازع في جدول تاريخ الأنماط، حيث يتشارك فرعان بتنبؤات متعاكسة نفس المدخل في الجدول. [ 18 ]
المتنبئ الهجين
يُطبّق المُتنبئ الهجين، أو المُتنبئ المُدمج، أكثر من آلية تنبؤ واحدة. ويستند التنبؤ النهائي إما إلى مُتنبئ شامل يتذكر أيًّا من المُتنبئات قدّم أفضل التنبؤات في الماضي، أو إلى دالة تصويت بالأغلبية تعتمد على عدد فردي من المُتنبئات المختلفة.
اقترح سكوت مكفارلينج التنبؤ المشترك بالفروع في ورقته البحثية عام 1993. [ 12 ]
في معايير SPEC'89، يكون هذا المتنبئ جيدًا تقريبًا مثل المتنبئ المحلي.
تستخدم أدوات التنبؤ مثل gshare عدة مدخلات في الجدول لتتبع سلوك أي فرع معين. هذا التعدد في المدخلات يزيد من احتمالية ربط فرعين بنفس المدخل (وهي حالة تُعرف باسم التداخل)، مما يؤدي بدوره إلى انخفاض دقة التنبؤ لهذين الفرعين. عند استخدام عدة أدوات تنبؤ، يُفضّل أن يكون لكل أداة نمط تداخل مختلف، بحيث يكون من المرجح ألا تحتوي إحداها على تداخل. تُسمى أدوات التنبؤ المُدمجة ذات وظائف الفهرسة المختلفة بأدوات gskew ، وهي تُشابه ذاكرات التخزين المؤقت الترابطية المائلة المستخدمة لتخزين البيانات والتعليمات مؤقتًا.
متنبئ الحلقات
يُمكن التنبؤ بالقفزة الشرطية التي تتحكم في حلقة تكرارية على أفضل وجه باستخدام مُتنبئ حلقات تكرارية خاص. القفزة الشرطية في أسفل حلقة تكرارية تتكرر N مرة ستُنفذ N-1 مرة، ثم لن تُنفذ ولا مرة. أما إذا وُضعت القفزة الشرطية في أعلى الحلقة، فلن تُنفذ N-1 مرة، ثم ستُنفذ مرة واحدة. تُكتشف القفزة الشرطية التي تُنفذ عدة مرات في اتجاه واحد، ثم في الاتجاه المعاكس مرة واحدة، على أنها ذات سلوك حلقة تكرارية. يُمكن التنبؤ بهذه القفزة الشرطية بسهولة باستخدام عداد بسيط. يُعد مُتنبئ الحلقات التكرارية جزءًا من مُتنبئ هجين، حيث يكشف مُتنبئ شامل ما إذا كانت القفزة الشرطية ذات سلوك حلقة تكرارية أم لا.
متنبئ الفروع غير المباشر
يمكن لتعليمات القفز غير المباشر الاختيار بين أكثر من فرعين. تحتوي بعض المعالجات على مُتنبئات مُخصصة للفروع غير المباشرة. [ 19 ] [ 20 ] تستطيع المعالجات الأحدث من إنتل [ 21 ] وإيه إم دي [ 22 ] التنبؤ بالفروع غير المباشرة باستخدام مُتنبئ تكيفي ثنائي المستوى. يُساهم هذا النوع من التعليمات بأكثر من بت واحد في مُخزن التاريخ. تدعم معالجات zEC12 والمعالجات اللاحقة من معمارية z/Architecture من آي بي إم تعليمة BRANCH PREDICTION PRELOAD التي تُحمّل مُدخل مُتنبئ الفرع لتعليمات مُعينة بعنوان هدف الفرع المُنشأ عن طريق إضافة مُحتويات مُسجل للأغراض العامة إلى قيمة إزاحة فورية. [ 23 ] [ 24 ]
المعالجات التي لا تحتوي على هذه الآلية ستتوقع ببساطة أن القفزة غير المباشرة ستذهب إلى نفس الهدف الذي ذهبت إليه في المرة السابقة. [ 9 ]
توقع عوائد الدالة
عادةً ما تعود الدالة إلى المكان الذي استُدعيت منه. تُعدّ تعليمة الإرجاع قفزة غير مباشرة تقرأ عنوان الوجهة من مكدس الاستدعاءات . تمتلك العديد من المعالجات الدقيقة آلية تنبؤ منفصلة لتعليمات الإرجاع. تعتمد هذه الآلية على ما يُسمى بمخزن مؤقت لمكدس الإرجاع ، وهو نسخة محلية من مكدس الاستدعاءات. يتراوح حجم مخزن مكدس الإرجاع عادةً بين 4 و16 مدخلاً. [ 9 ]
تجاوز التنبؤ بالتفرع
يُعالج التوازن بين سرعة التنبؤ بالفروع وجودة التنبؤ بها أحيانًا باستخدام مُتنبئين للفروع. الأول سريع وبسيط، أما الثاني، وهو أبطأ وأكثر تعقيدًا ويستخدم جداول بيانات أكبر، فيُمكنه تجاوز أي تنبؤ خاطئ قد يُصدره المُتنبئ الأول.
استخدمت المعالجات الدقيقة Alpha 21264 و Alpha EV8 مُتنبئًا سريعًا أحادي الدورة للخط التالي للتعامل مع تكرار هدف التفرع وتوفير تنبؤ بسيط وسريع للتفرع. ولأن مُتنبئ الخط التالي غير دقيق، ولأن تكرار حل التفرع يستغرق وقتًا طويلاً، فإن كلا النواتين تحتويان على مُتنبئين ثانويين للتفرع يعملان بدورتين، ويمكنهما تجاوز تنبؤ مُتنبئ الخط التالي مقابل فقدان دورة جلب واحدة.
يحتوي معالج Intel Core i7 على مخزنين مؤقتين لأهداف التفرع ، وربما اثنين أو أكثر من متنبئات التفرع. [ 25 ]
التنبؤ بتفرعات الخلايا العصبية
اقترح لوسيان فينتان ( جامعة لوسيان بلاغا في سيبيو ) استخدام التعلم الآلي للتنبؤ بالتفرعات باستخدام LVQ والشبكات العصبية متعددة الطبقات ، والذي يُعرف باسم " التنبؤ العصبي بالتفرعات". [ 26 ] وبعد عام، طوّر مُتنبئ التفرعات باستخدام الشبكات العصبية. [ 27 ] ثمّ طوّر دانيال خيمينيز أبحاث التنبؤ العصبي بالتفرعات بشكل كبير. [ 28 ] وفي عام 2001، [ 28 ] عُرض أول مُتنبئ شبكات عصبية قابل للتطبيق عمليًا في الأجهزة. وكان أول تطبيق تجاري لمُتنبئ التفرعات باستخدام الشبكات العصبية في بنية Piledriver الدقيقة من AMD . [ 29 ]
تتمثل الميزة الرئيسية للمتنبئ العصبي في قدرته على استغلال البيانات التاريخية الطويلة مع الحاجة إلى نمو خطي للموارد فقط، بينما تتطلب المتنبئات التقليدية نموًا أُسّيًا للموارد. وقد أفاد خيمينيز بتحقيق تحسن شامل بنسبة 5.7% مقارنةً بمتنبئ هجين من نوع ماكفارلينغ. [ 30 ] كما استخدم أيضًا نموذج gshare/perceptron لتجاوز المتنبئات الهجينة. [ 30 ]
تتمثل العيوب الرئيسية لمتنبئ البيرسيبترون في زمن استجابته العالي. فحتى بعد الاستفادة من تقنيات الحساب عالية السرعة، يظل زمن الاستجابة الحسابية مرتفعًا نسبيًا مقارنةً بدورة الساعة في العديد من البنى الدقيقة الحديثة. ولتقليل زمن استجابة التنبؤ، اقترح خيمينيز في عام 2003 متنبئ المسار السريع العصبي ، حيث يختار متنبئ البيرسيبترون أوزانه وفقًا لمسار الفرع الحالي، بدلًا من دورة الساعة الخاصة به. وقد طور العديد من الباحثين الآخرين هذا المفهوم (مثل: أ. سيزنيك، م. مونشيرو، د. تارجان، ك. سكادرون، ف. ديسميت، أكاري وآخرون، ك. آساراي، مايكل بلاك، وغيرهم).
تستخدم معظم برامج التنبؤ بالتفرعات الحديثة نموذج التنبؤ بالبيرسيبترون (انظر "مسابقة إنتل للتنبؤ بالتفرعات" [ 31 ] ). وقد طبقت إنتل هذه الفكرة بالفعل في أحد برامج محاكاة معالج IA-64 (2003). [ 32 ]
تتضمن معالجات AMD Ryzen [ 33 ] [ 34 ] [ 35 ] متعددة النوى Infinity Fabric ومعالجات Samsung Exynos تنبؤات الفروع العصبية القائمة على perceptron.
تاريخ
يُنفّذ جهاز IBM 7030 Stretch ، الذي صُمّم في أواخر خمسينيات القرن الماضي، جميع التفرعات غير المشروطة وأي تفرعات مشروطة تعتمد على سجلات الفهرسة مُسبقًا. أما بالنسبة للتفرعات المشروطة الأخرى، فقد طبّق النموذجان الإنتاجيان الأولان التنبؤ بالتفرعات غير المُنفّذة؛ بينما عُدّلت النماذج اللاحقة لتطبيق التنبؤات بناءً على القيم الحالية لبتات المؤشر (المقابلة لرموز الحالة الحالية). [ 36 ] كان مصممو Stretch قد فكّروا في استخدام بتات تلميح ثابتة في تعليمات التفرع في المراحل الأولى من المشروع، لكنهم تراجعوا عن ذلك. وقد وفّرت وحدة التنبؤ المسبق في Stretch إمكانية استعادة التنبؤ الخاطئ، ويُعزى جزء من سمعة Stretch بأدائه المتواضع إلى الوقت اللازم لاستعادة التنبؤ الخاطئ. ولم تستخدم تصميمات أجهزة الكمبيوتر الكبيرة اللاحقة من IBM التنبؤ بالتفرعات مع التنفيذ التخميني حتى جهاز IBM 3090 في عام 1985.
تم تقديم المتنبئات ذات البتات الثنائية بواسطة توم ماك ويليامز وكورت ويدوز في عام 1977 للحاسوب العملاق S-1 التابع لمختبر لورانس ليفرمور الوطني، وبشكل مستقل بواسطة جيم سميث في عام 1979 في مركز السيطرة على الأمراض والوقاية منها. [ 37 ]
كانت المعالجات المبرمجة دقيقًا، والتي شاعت من ستينيات القرن العشرين وحتى ثمانينياته وما بعده، تستغرق عدة دورات لكل تعليمة، ولم تكن تتطلب عادةً التنبؤ بالتفرع. ومع ذلك، فبالإضافة إلى معالج IBM 3090، توجد أمثلة أخرى عديدة لتصاميم مبرمجة دقيقًا تضمنت التنبؤ بالتفرع.
كانت آلة Burroughs B4900 ، وهي آلة برمجة دقيقة بلغة COBOL صدرت حوالي عام 1982، تعتمد على تقنية خطوط الأنابيب وتستخدم التنبؤ بالتفرع. يتم تخزين حالة سجل التنبؤ بالتفرع في B4900 في تعليمات الذاكرة أثناء تنفيذ البرنامج. تُنفذ B4900 التنبؤ بالتفرع بأربع حالات باستخدام أربعة رموز عمليات متكافئة دلاليًا لتمثيل كل نوع من أنواع عوامل التفرع. يشير رمز العملية المستخدم إلى سجل تعليمات التفرع المحددة. إذا حدد الجهاز أن حالة التنبؤ بالتفرع لتفرع معين تحتاج إلى تحديث، فإنه يعيد كتابة رمز العملية برمز العملية المكافئ دلاليًا الذي يشير إلى السجل الصحيح. يحقق هذا النظام معدل نجاح 93%. مُنحت براءة الاختراع الأمريكية رقم 4,435,756 وغيرها لهذا النظام.
يتميز جهاز DEC VAX 9000 ، الذي أُعلن عنه في عام 1989، بأنه مُبرمج بدقة عالية ومُصمم بتقنية خطوط الأنابيب، ويقوم بتنفيذ التنبؤ بالتفرعات. [ 38 ]
تعتمد معالجات RISC التجارية الأولى، MIPS R2000 و R3000 ، ومعالجات SPARC السابقة ، على التنبؤ البسيط بمسارات التفرع غير المنفذة. ولأنها تستخدم خانات تأخير التفرع، وتجلب تعليمة واحدة فقط في كل دورة، وتنفذ التعليمات بالتسلسل، فلا يوجد أي انخفاض في الأداء. أما معالج R4000 اللاحق ، فيستخدم نفس التنبؤ البسيط بمسارات التفرع غير المنفذة، ولكنه يفقد دورتين لكل مسار تفرع منفذ، لأن تكرار حل التفرع يستغرق أربع دورات.
ازدادت أهمية التنبؤ بالتفرعات مع ظهور المعالجات فائقة القياس ذات البنية الأنبوبية، مثل معالجات Intel Pentium وDEC Alpha 21064 و MIPS R8000 وسلسلة IBM POWER . وتعتمد هذه المعالجات جميعها على مُتنبئات أحادية البت أو مُتنبئات ثنائية النمط بسيطة.
يستخدم DEC Alpha 21264 (EV6) مُتنبئ الخط التالي الذي يتم تجاوزه بواسطة مُتنبئ محلي مُدمج ومُتنبئ عالمي، حيث يتم اختيار الدمج بواسطة مُتنبئ ثنائي النمط. [ 39 ]
يحتوي معالج AMD K8 على مُتنبئ ثنائي النمط ومُتنبئ عالمي مُدمج، حيث يكون الخيار المُدمج مُتنبئًا ثنائي النمط آخر. يُخزّن هذا المعالج عدادات مُتنبئَي القاعدة والاختيار ثنائي النمط في بتات ذاكرة التخزين المؤقت من المستوى الثاني (L2)، والتي تُستخدم عادةً لتصحيح الأخطاء (ECC). ونتيجةً لذلك، يمتلك المعالج جداول مُتنبئات قاعدة واختيار كبيرة جدًا، ويستخدم التكافؤ بدلًا من تصحيح الأخطاء (ECC) على التعليمات الموجودة في ذاكرة التخزين المؤقت من المستوى الثاني (L2). يُعد تصميم التكافؤ كافيًا، حيث يُمكن إبطال أي تعليمة تُعاني من خطأ في التكافؤ وإعادة جلبها من الذاكرة.
كان لدى خوارزمية ألفا 21464 [ 39 ] (EV8، التي أُلغيت في مراحل متأخرة من التصميم) حد أدنى لعقوبة التنبؤ الخاطئ للفروع يبلغ 14 دورة. وكان من المقرر أن تستخدم مُتنبئًا معقدًا ولكنه سريعًا للسطر التالي، يتم تجاوزه بواسطة مُتنبئ ثنائي النمط ومُتنبئ تصويت الأغلبية. وكان تصويت الأغلبية بين مُتنبئ ثنائي النمط ومُتنبئين من نوع gskew.
في عام 2018، كشف مشروع زيرو التابع لشركة جوجل وباحثون آخرون عن ثغرة أمنية كارثية تُعرف باسم "سبيكتر" . تؤثر هذه الثغرة على جميع وحدات المعالجة المركزية الحديثة تقريبًا ، وتتمثل في تهيئة مُتنبئات التفرعات بحيث يقوم برنامج آخر (أو نواة النظام) بتوقع تفرع خاطئ واستخدام بيانات سرية كمؤشر للمصفوفة، مما يؤدي إلى إخراج أحد أسطر ذاكرة التخزين المؤقت الخاصة بالمهاجم. يستطيع المهاجم توقيت الوصول إلى مصفوفته الخاصة لمعرفة أيها، محولًا حالة وحدة المعالجة المركزية الداخلية (على مستوى البنية الدقيقة) إلى قيمة يمكن للمهاجم حفظها، تحتوي على معلومات حول قيم لا يمكنه قراءتها مباشرة. [ 40 ]
انظر أيضاً
- متنبئ هدف الفرع
- هجمات تحليل التنبؤ بالتفرع – على نظام التشفير RSA باستخدام المفتاح العام
- قائمة انتظار الفروع
- وحدة تعليمية
- جلب البيانات المسبق من ذاكرة التخزين المؤقت
- التحكم غير المباشر في الفروع (IBC)
- حاجز التنبؤ بالتفرع غير المباشر (IBPB)
- المضاربة المقيدة بالفرع غير المباشر (IBRS)
- التنبؤ (هندسة الحاسوب)
- مُتنبئ الفروع غير المباشر ذو الخيط الواحد (STIBP)
مراجع
- 1 2 3 مالشيفسكي، أليكسي؛ بيك، دوغلاس؛ شميد، أندرياس؛ لاندري، إريك. "التنبؤ بالتفرع الديناميكي" . مؤرشف من الأصل بتاريخ 17 يوليو 2019. تم الاطلاع عليه بتاريخ 22 مارس 2017 .
- 1 2 تشنغ، تشيه-تشنغ. "مخططات وأداء المتنبئين بالتفرع الديناميكي" (PDF) .
- ↑ باريهار، راج. "تقنيات التنبؤ بالفروع وتحسينها" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 16 مايو 2017. تم الاطلاع عليه بتاريخ 2 أبريل 2017 .
- ↑ موتلو، أونور (11 فبراير 2013). "محاضرة 11 في هندسة الحاسوب 18-447: التنبؤ بالتفرع" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 25 مارس 2015.
- ^ ميشود، بيير. سيزنيك، أندريه. أوليغ ، ريتشارد (سبتمبر 1996). تنبؤات فرع منحرفة . هال (تقرير). S2CID 3712157 .
- ↑ إيرمان، س.؛ سميث، ج. إي.؛ إيكهوت، ل. (2006). توصيف عقوبة التنبؤ الخاطئ للفرع . ندوة IEEE الدولية لعام 2006 حول تحليل أداء الأنظمة والبرمجيات. IEEE. ص 48-58 . doi : 10.1109/ispass.2006.1620789 . ISBN 1-4244-0186-0. S2CID 72217 .
- ↑ شين ، جون ب.؛ ليباستي، ميكو (2005). تصميم المعالجات الحديثة: أساسيات المعالجات فائقة القياس . بوسطن: ماكجرو هيل للتعليم العالي . ص 455. ISBN 0-07-057064-7.
- ↑ "دليل مجموعة تعليمات RISC-V، المجلد الأول: بنية غير مميزة" . مستندات جوجل .
- 1 2 3 4 5 6 فوغ، أغنر (2016-12-01). "البنية الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا" (ملف PDF) . الصفحات 26، 38. تاريخ الاسترجاع: 2017-03-22 .
- ↑ "معالج Pentium 4 ومعالج G4e: مقارنة معمارية" . Ars Technica . 12 مايو 2001.
- ↑ بلاسكويليك، جيم. "CMSC 611: هندسة الحاسوب المتقدمة، الفصل 4 (الجزء الخامس)" .
- 1 2 3 ماكفارلينج، سكوت (يونيو 1993). "دمج مُتنبئات الفروع" (ملف PDF) . تقرير فني من مختبر الأبحاث الغربية الرقمية (WRL)، TN-36.
- ↑ "خوارزمية جديدة تُحسّن التنبؤ بالتفرع: 27/3/1995" (ملف PDF) . تقرير المعالجات الدقيقة . 9 (4). 27 مارس 1995. مؤرشف (ملف PDF) من الأصل بتاريخ 10 مارس 2015. تم الاطلاع عليه بتاريخ 2 فبراير 2016 .
- ↑ يه، ت.-ي.؛ بات، ي.ن. (1991). "التنبؤ بفروع التدريب التكيفي ثنائي المستوى". وقائع الندوة الدولية السنوية الرابعة والعشرين حول الهندسة المعمارية الدقيقة . ألبوكيرك، نيو مكسيكو، بورتوريكو: ACM. ص 51-61 . doi : 10.1145/123465.123475 .
- ↑ فوج، أغنر. "التنبؤ بالفروع في عائلة بنتيوم" . مجلة دكتور دوب . مؤرشف من الأصل في 13 مايو 2008.
- ↑ إيغان، كولين؛ ستيفن، غوردون؛ كويك، ب.؛ أنغويرا، ر.؛ فينتان، لوسيان (ديسمبر 2003). "التنبؤ بالتفرعات على مستويين باستخدام الشبكات العصبية" . مجلة هندسة النظم . 49 ( 12-15 ): 557-570 . doi : 10.1016/S1383-7621(03)00095-X .
- ↑ سكادرون، ك.؛ مارتونوسي، م.؛ كلارك، د. و. (أكتوبر 2000). "تصنيف أخطاء التنبؤ بالفروع، والتنبؤ المُدمج كحل قوي لأخطاء التنبؤ بالتاريخ الخاطئ" (ملف PDF) . وقائع المؤتمر الدولي لعام 2000 حول البنى المتوازية وتقنيات الترجمة . فيلادلفيا. ص 199-206 . doi : 10.1109/PACT.2000.888344 .
- ↑ سبرانجل، إي.؛ تشابيل، آر. إس.؛ ألسوب، إم.؛ بات، واي. إن. (يونيو 1997). "المتنبئ المتفق: آلية للحد من تداخل تاريخ التفرع السلبي" (ملف PDF) . وقائع الندوة الدولية الرابعة والعشرين حول هندسة الحاسوب . دنفر. doi : 10.1145/264107.264210 .
- ↑ "دليل المرجع التقني لـ Cortex-A15 MPCore، القسم 6.5.3 "المتنبئ غير المباشر"" . ARM Holdings .
- ↑ دريسن، كاريل؛ هولزلي، أورس (25-06-1997). "حدود التنبؤ غير المباشر بالفروع" (ملف PDF) . مؤرشف من الأصل (ملف PDF) بتاريخ 06-05-2016.
- ↑ ستوكس، جون (2004-02-25). "نظرة على قلب سينترينو: بنتيوم إم" . الصفحات 2-3 .
- ↑ كانتر، آرون (2008-10-28). "تحليل الأداء لـ Core 2 و K8: الجزء 1" . ص 5.
- ↑ مبادئ تشغيل بنية z (ملف PDF) ( الطبعة الرابعة عشرة). شركة IBM . مايو 2022. الصفحات 7-42 – 7-45 . SA22-7832-13.
- ↑ "دليل IBM zEnterprise BC12 التقني" (ملف PDF) . IBM . فبراير 2014. ص 78.
- ↑ WO 2000/014628 ، يه، تسيه-يو وشارانغباني ، إتش بي، "طريقة وجهاز للتنبؤ بالفروع باستخدام جدول تنبؤ بالفروع من المستوى الثاني"، نُشر في 16 مارس 2000
- ↑ فينتان، لوسيان ن. (1999). "نحو مُتنبئ تفرعات عصبي عالي الأداء" (ملف PDF) . وقائع المؤتمر الدولي للشبكات العصبية (IJCNN) . doi : 10.1109/IJCNN.1999.831066 . مؤرشف من الأصل (ملف PDF) بتاريخ 13 يوليو 2019. تاريخ الاسترجاع: 2 ديسمبر 2010 .
- ↑ فينتان، لوسيان ن. (2000). "نحو مُتنبئ قوي للفروع الديناميكية" (ملف PDF) . المجلة الرومانية لعلوم وتكنولوجيا المعلومات . 3 (3). بوخارست: الأكاديمية الرومانية: 287-301 . ISSN 1453-8245 .
- 1 2 خيمينيز، د.أ.؛ لين، س. (2001). "التنبؤ الديناميكي بالتفرعات باستخدام البيرسيبترونات" (ملف PDF) . وقائع الندوة الدولية السابعة حول هندسة الحواسيب عالية الأداء (HPCA-7) . مونتيري، نويفو ليون، المكسيك. الصفحات 197-296 . doi : 10.1109/HPCA.2001.903263 .
- ↑ والتون، جاريد (15 مايو 2012). "مراجعة معالج AMD Trinity (A10-4600M): أمل جديد" . AnandTech . مؤرشف من الأصل في 17 مايو 2012.
- ١ ٢ خيمينيز، دانيال أ. (ديسمبر ٢٠٠٣). التنبؤ السريع بتفرعات الشبكات العصبية باستخدام المسارات (ملف PDF) . المؤتمر الدولي السنوي السادس والثلاثون لمعهد مهندسي الكهرباء والإلكترونيات/رابطة مكائن الحوسبة حول هندسة المعالجات الدقيقة (MICRO-36). سان دييغو، الولايات المتحدة الأمريكية. الصفحات ٢٤٣-٢٥٢ . doi : 10.1109/MICRO.2003.1253199 . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ ٣١ مارس ٢٠١٦. تم الاطلاع عليه بتاريخ ٨ أبريل ٢٠١٨ .
- ↑ "توقعات فرع البطولة" .
- ↑ بريكلباوم، إدوارد؛ روبلي، جيف؛ ويلكرسون، كريس؛ بلاك، برايان (ديسمبر 2002). "نوافذ الجدولة الهرمية". وقائع الندوة الدولية الخامسة والثلاثين حول الهندسة المعمارية الدقيقة . إسطنبول، تركيا. doi : 10.1109/MICRO.2002.1176236 .
- ↑ جيمس، ديف (2017-12-06). "مراجعات معالجات AMD Ryzen، الأخبار، الأداء، الأسعار، والتوافر" . PCGamesN .
- ↑ "شركة AMD تنقل الحوسبة إلى آفاق جديدة مع معالجات Ryzen™" (بيان صحفي). AMD . تاريخ الاطلاع: 14 ديسمبر 2016 .
- ↑ «معالج AMD Zen يُطلق عليه الآن اسم Ryzen، وقد يُنافس معالجات Intel بالفعل» . Ars Technica UK . تاريخ الاطلاع: 14 ديسمبر 2016 .
- ↑ "IBM Stretch (7030) -- التوازي العدواني للمعالج الأحادي" .
- ↑ "الحاسوب العملاق S-1" .
- ↑ موراي، جيه إي؛ ساليت، آر إم؛ هيذرينغتون، آر سي؛ ماكين، إف إكس (1990). "البنية الدقيقة لجهاز VAX 9000". ملخص أوراق مؤتمر Compcon ربيع 1990. المؤتمر الدولي الخامس والثلاثون لجمعية مهندسي الكهرباء والإلكترونيات (IEEE) حول الاستفادة الفكرية . الصفحات 44-53 . doi : 10.1109/CMPCON.1990.63652 . ISBN 0-8186-2028-5. S2CID 24999559 .
- 1 2 سيزنيك، أ.؛ فيليكس، س.؛ كريشنان، ف.؛ سازيدس، ي. "مفاضلات التصميم لمتنبئ التفرع الشرطي ألفا EV8" . وقائع الندوة الدولية السنوية التاسعة والعشرين حول هندسة الحاسوب . doi : 10.1109/ISCA.2002.1003587 .
- ↑ جيبس، صموئيل (4 يناير 2018). "ميلتداون وسبكتر: أسوأ ثغرات في المعالجات على الإطلاق تؤثر على جميع أجهزة الكمبيوتر تقريبًا" . صحيفة الغارديان . تم الاطلاع عليه بتاريخ 18 مايو 2018 .
روابط خارجية
- سيزنيك وآخرون (1996). " متنبئات الفروع متعددة الكتل " - يوضحون أن دقة التنبؤ لا تتأثر بالفهرسة باستخدام عنوان الفرع السابق.
- سيزنيك وآخرون (2002). " المفاضلات التصميمية لمتنبئ التفرع الشرطي ألفا EV8 " - يصف هذا البحث متنبئ التفرع ألفا EV8. ويُقدم البحث شرحًا وافيًا لكيفية التوصل إلى هذا التصميم من خلال دراسة قيود الأجهزة المختلفة ودراسات المحاكاة.
- خيمينيز (2003). " إعادة النظر في المتنبئات المعقدة للفروع " - يصف المتنبئات EV6 و K8 للفروع، واعتبارات خط الأنابيب.
- فوج، أغنر (2009). "البنية الدقيقة لوحدات المعالجة المركزية من إنتل، وإيه إم دي، وفيا" . تم الاسترجاع في 1 أكتوبر 2009 .
- أندروز، جيف (30 أكتوبر 2007). "إعادة تنظيم الفروع والحلقات لمنع التنبؤات الخاطئة" . شبكة برمجيات إنتل . مؤرشف من الأصل في 11 نوفمبر 2018. تم الاطلاع عليه في 10 نوفمبر 2018 .
- يي، ألكسندر (27 يونيو 2012). "ما هو التنبؤ بالتفرع؟ (الإجابة الأولى، الإجابة 35214) لماذا تكون معالجة المصفوفة المرتبة أسرع من معالجة المصفوفة غير المرتبة؟" . ستاك أوفرفلو: جافا .
- معالجة التعليمات
- التنفيذ التخميني
