الرائد
كان MAJC (معمارية المعالج الدقيق لحوسبة جافا) تصميمًا لمعالج دقيق متعدد النوى ومتعدد الخيوط، يستخدم كلمات تعليمات طويلة جدًا (VLIW)، من إنتاج شركة صن مايكروسيستمز، في منتصف إلى أواخر التسعينيات. كان يُعرف في الأصل باسم معالج UltraJava، وقد صُمم معالج MAJC لتشغيل برامج جافا ، حيث سمحت له خاصية "التجميع المتأخر" باتخاذ العديد من قرارات التصميم المُوفقة. أُصدر المعالج في بطاقتي رسومات تجاريتين من صن. وقد وفرت الدروس المستفادة من تعدد الخيوط على معالج متعدد النوى أساسًا لتطبيقات OpenSPARC اللاحقة ، مثل UltraSPARC T1 .
عناصر التصميم
انقل جدولة التعليمات إلى المترجم
على غرار تصميمات VLIW الأخرى، ولا سيما معالج IA-64 (إيتانيوم) من إنتل ، سعت MAJC إلى تحسين الأداء بنقل العديد من العمليات المكلفة من المعالج إلى المترجمات البرمجية. وبشكل عام، تحاول تصميمات VLIW التخلص من مُجدول التعليمات ، الذي غالبًا ما يُمثل نسبة كبيرة من إجمالي ترانزستورات المعالج. وبنقل هذا الجزء من وحدة المعالجة المركزية إلى البرمجيات، يُمكن استخدام هذه الترانزستورات لأغراض أخرى، كإضافة وحدات وظيفية لمعالجة المزيد من التعليمات في وقت واحد، أو لزيادة سعة ذاكرة التخزين المؤقت لتقليل وقت انتظار البيانات من الذاكرة الرئيسية الأبطأ بكثير . ورغم أن MAJC تشارك هذه المفاهيم العامة، إلا أنها اختلفت عن تصميمات VLIW الأخرى، والمعالجات عمومًا، في عدد من التفاصيل المحددة.
الوحدات الوظيفية العامة
تتضمن معظم المعالجات عددًا من "المعالجات الفرعية" المنفصلة، والمعروفة بالوحدات الوظيفية ، والمُصممة خصيصًا لمعالجة أنواع معينة من البيانات. على سبيل المثال، تحتوي وحدة المعالجة المركزية الحديثة عادةً على وحدتين أو ثلاث وحدات وظيفية مُخصصة لمعالجة البيانات الصحيحة والتعليمات المنطقية، وتُعرف بوحدات الحساب والمنطق (ALU) ، بينما تتولى وحدات أخرى معالجة الأعداد العشرية ، وتُعرف بوحدات معالجة الأعداد العشرية (FPU) ، أو بيانات الوسائط المتعددة، وتُعرف بوحدات SIMD . أما MAJC، فقد استخدمت وحدة وظيفية واحدة متعددة الأغراض قادرة على معالجة أي نوع من البيانات. نظريًا، يعني هذا النهج أن معالجة أي نوع من البيانات ستستغرق وقتًا أطول، وربما أطول بكثير، من معالجة البيانات نفسها في وحدة مُخصصة لهذا النوع من البيانات. ولكن من ناحية أخرى، فإن هذه الوحدات متعددة الأغراض تعني أيضًا عدم وجود أجزاء كبيرة من وحدة المعالجة المركزية غير مُستغلة لمجرد أن البرنامج كان يُجري العديد من العمليات الحسابية (على سبيل المثال) للأعداد العشرية في تلك اللحظة.
حزم تعليمات متغيرة الطول
يتمثل أحد الاختلافات الأخرى في أن MAJC سمحت باستخدام " حزم تعليمات " متغيرة الطول ، والتي تحتوي في VLIW على عدد من التعليمات التي يحددها المترجم بحيث يمكن تنفيذها في الوقت نفسه. تستخدم معظم بنى VLIW حزمًا ثابتة الطول، وعندما لا تجد تعليمة لتنفيذها، فإنها تملأها بـ "لا شيء" NOP، مما يشغل مساحة فقط. على الرغم من أن حزم التعليمات متغيرة الطول أضافت بعض التعقيد إلى وحدة المعالجة المركزية، إلا أنها قللت من حجم الكود، وبالتالي من عدد أخطاء ذاكرة التخزين المؤقت المكلفة ، وذلك عن طريق زيادة كمية الكود الموجودة في ذاكرة التخزين المؤقت في أي وقت.
تجنب الأقفال والتوقفات
يكمن الاختلاف الرئيسي في أن تصميم MAJC يتطلب من المُصرّف تجنب حالات التداخل ، أي توقف التنفيذ مؤقتًا أثناء معالجة نتائج تعليمة ما قبل تنفيذ التعليمة التالية. على سبيل المثال، إذا تم تزويد المعالج بالتعليمات C = A + B, E = C + D، فلن تُنفذ التعليمة الثانية إلا بعد اكتمال الأولى. تتضمن معظم المعالجات آليات أقفال في تصميمها لإيقاف وإعادة جدولة هذا النوع من التعليمات المتداخلة، مما يسمح بتنفيذ بعض التعليمات الأخرى أثناء حساب قيمة C. مع ذلك، تُعد هذه الأقفال مكلفة للغاية من حيث مساحة الشريحة، وتمثل الجزء الأكبر من منطق مُجدول التعليمات.
لكي يتجنب المترجم هذه التداخلات، يجب أن يعرف بدقة المدة التي تستغرقها كل تعليمة من هذه التعليمات لإتمامها. على سبيل المثال، إذا استغرقت عملية ضرب عدد عشري ثلاث دورات، فسيحاول مترجم MAJC جدولة تعليمات أخرى تستغرق ثلاث دورات لإتمامها وليست عالقة حاليًا. مع ذلك، قد يؤدي تغيير في التنفيذ الفعلي إلى تقليل هذا التأخير إلى تعليمتين فقط، ويجب أن يكون المترجم على دراية بهذا التغيير.
هذا يعني أن المُصرّف لم يكن مرتبطًا بـ MAJC ككل، بل بتنفيذ مُحدد لـ MAJC، حيث يعتمد كل معالج على تصميم MAJC. عادةً ما يُمثل هذا مشكلة لوجستية كبيرة؛ لنأخذ على سبيل المثال عدد الاختلافات في تصميم Intel IA-32 ، فكل منها يحتاج إلى مُصرّف خاص به، ويتعين على المُطور إنتاج ملف تنفيذي مُختلف لكل منها. مع ذلك، فإن هذا المفهوم تحديدًا هو ما يُحرك سوق جافا - فهناك بالفعل مُصرّف مُختلف لكل بنية مجموعة تعليمات (ISA) ، ويتم تثبيته على جهاز العميل بدلًا من جهاز المُطور. يُرسل المُطور نسخة واحدة فقط من برنامجه بلغة البايت كود ، ويقوم جهاز المستخدم بتجميعها إلى النظام الأساسي.
في الواقع، تُعدّ جدولة التعليمات بهذه الطريقة مشكلة بالغة الصعوبة. ففي التطبيقات العملية، تواجه المعالجات التي تحاول جدولة هذه التعليمات أثناء التشغيل العديد من الحالات التي تكون فيها البيانات المطلوبة خارج الذاكرة المؤقتة، ولا توجد أي تعليمات أخرى في البرنامج لا تعتمد على هذه البيانات. في هذه الحالات، قد يتوقف المعالج لفترات طويلة في انتظار الوصول إلى الذاكرة الرئيسية. ولا يُجدي أسلوب VLIW نفعًا كبيرًا في هذا الصدد؛ فعلى الرغم من أن المُصرّف قد يتمكن من قضاء وقت أطول في البحث عن التعليمات اللازمة للتنفيذ، إلا أن ذلك لا يضمن العثور عليها فعليًا.
حاولت MAJC معالجة هذه المشكلة من خلال إمكانية تنفيذ التعليمات البرمجية من خيوط أخرى إذا توقف الخيط الحالي في الذاكرة. عادةً ما تكون عملية تبديل الخيوط عملية مكلفة للغاية تُعرف باسم تبديل السياق ، وفي المعالجات التقليدية، يُهدر هذا التبديل أي توفير في الموارد ويؤدي عمومًا إلى إبطاء الجهاز. في MAJC، كان النظام قادرًا على الاحتفاظ بحالة ما يصل إلى أربعة خيوط في الذاكرة في الوقت نفسه، مما يقلل من طول تبديل السياق إلى بضع تعليمات فقط. ظهرت هذه الميزة لاحقًا في معالجات أخرى؛ وتشير إليها إنتل باسم HyperThreading .
طوّرت MAJC هذه الفكرة خطوةً أخرى، وحاولت جلب البيانات والتعليمات اللازمة للخيوط مسبقًا أثناء توقفها. تتضمن معظم المعالجات وظائف مماثلة لأجزاء من تدفق التعليمات، تُعرف بالتنفيذ التخميني ، حيث يُشغّل المعالج كلا النتيجتين المحتملتين للتفرع أثناء انتظار حساب المتغير الحاسم. أما MAJC، فواصلت تشغيل الخيط كما لو لم يكن متوقفًا، مستخدمةً هذا التنفيذ للعثور على أي بيانات أو تعليمات ستكون مطلوبة قريبًا عند توقف الخيط، ثم تحميلها. أطلقت شركة Sun على هذه التقنية اسم الحوسبة المكانية الزمنية (STC)، وهي تصميم متعدد الخيوط قائم على التخمين .
حاولت المعالجات حتى هذه المرحلة استخلاص التوازي في خيط واحد، وهي تقنية بدأت تقترب من حدودها القصوى من حيث تناقص العائد. يبدو أن تصميم MAJC، بشكل عام، سعى لتجنب حالات التوقف عن طريق التشغيل عبر خيوط (وبرامج) متعددة بدلاً من البحث عن التوازي في خيط واحد. من المتوقع عمومًا أن يكون أداء VLIW أسوأ نوعًا ما من حيث حالات التوقف نظرًا لصعوبة فهم سلوك وقت التشغيل أثناء الترجمة، مما يجعل نهج MAJC في التعامل مع هذه المشكلة مثيرًا للاهتمام بشكل خاص.
التطبيقات
أنتجت شركة صن نموذجًا واحدًا من معالج MAJC، وهو MAJC 5200 ثنائي النواة ، والذي شكّل قلب لوحات الرسومات الخاصة بمحطات العمل XVR-1000 وXVR-4000 . مع ذلك، فقد شقت العديد من أفكار التصميم متعددة النوى والخيوط، ولا سيما فيما يتعلق باستخدام خيوط متعددة لتقليل تأخيرات التوقف، طريقها إلى سلسلة معالجات SPARC من صن، بالإضافة إلى تصاميم من شركات أخرى. علاوة على ذلك، يبدو أن فكرة MAJC المتمثلة في تصميم المعالج لتشغيل أكبر عدد ممكن من الخيوط، بدلاً من التعليمات، هي أساس تصميم UltraSPARC T1 اللاحق (الذي يحمل الاسم الرمزي Niagara ).
انظر أيضاً
للمزيد من القراءة
- كيس، برايان (25 أكتوبر 1999). "الشمس تصنع MAJC بالمرايا". تقرير المعالج الدقيق .
- غويناب، لينلي (13 سبتمبر 1999). "MAJC يمنح VLIW لمسة جديدة". تقرير المعالج الدقيق .
- هالفيل، توم (24 أغسطس 1999). "الشمس تكشف أسرار 'السحر ' " . تقرير المعالج الدقيق .
روابط خارجية
- معالجات صن الدقيقة
- معالجة الكلمات الطويلة جداً للتعليمات
