اختيار التعليمات
في علوم الحاسوب ، يُعدّ اختيار التعليمات المرحلة الأساسية في الواجهة الخلفية للمترجم ، حيث يُحوّل تمثيله الوسيط (IR) من المستوى المتوسط إلى المستوى الأدنى. في المترجمات النموذجية، يسبق اختيار التعليمات كلاً من جدولة التعليمات وتخصيص المسجلات ؛ لذا، يحتوي تمثيله الوسيط الناتج على عدد لا نهائي من المسجلات الوهمية (المعروفة غالبًا بالمسجلات المؤقتة )، وقد يخضع -وهو ما يحدث عادةً- لتحسينات جزئية . بخلاف ذلك، يُشابه هذا التمثيل إلى حد كبير لغة الآلة المستهدفة ، أو لغة البايت كود ، أو لغة التجميع .
على سبيل المثال، بالنسبة لتسلسل رمز IR متوسط المستوى التالي
t1 = a t2 = b t3 = t1 + t2 أ = ت3 ب = ت1
يُعد تسلسل التعليمات الجيد لبنية x86 هو
MOV EAX , a XCHG EAX , b ADD a , EAXللاطلاع على دراسة شاملة حول اختيار أساليب التدريس، انظر [ 1 ] [ 2 ]
التوسع الكلي
تُعرف أبسط طريقة لاختيار التعليمات باسم توسيع الماكرو [ 3 ] أو توليد الشفرة التفسيرية . [ 4 ] [ 5 ] [ 6 ] يعمل مُحدد التعليمات المُوسّع للماكرو عن طريق مطابقة القوالب على مستوى التمثيل الوسيط. عند المطابقة، يتم تنفيذ الماكرو المُناسب ، باستخدام الجزء المُطابق من التمثيل الوسيط كمدخل، والذي يُصدر تعليمات الهدف المُناسبة. يُمكن إجراء توسيع الماكرو إما مُباشرةً على التمثيل النصي للتمثيل الوسيط، [ 7 ] [ 8 ] أو يُمكن تحويل التمثيل الوسيط أولاً إلى تمثيل رسومي ثم اجتيازه بطريقة البحث العمقي. [ 9 ] في الحالة الأخيرة، يُطابق القالب عقدة واحدة أو أكثر مُجاورة في الرسم البياني.
ما لم يكن الجهاز المستهدف بسيطًا للغاية، فإن توسيع الماكرو بمعزل عن غيره عادةً ما يُنتج شيفرة غير فعّالة. وللتخفيف من هذا القيد، تقوم المترجمات التي تُطبّق هذا النهج عادةً بدمجه مع تحسين الثغرات البرمجية لاستبدال مجموعات التعليمات البسيطة بنظائر أكثر تعقيدًا تُحسّن الأداء وتُقلّل حجم الشيفرة. يُعرف هذا بنهج ديفيدسون-فريزر ، ويُطبّق حاليًا في مُجمّع GCC . [ 10 ]
تغطية الرسم البياني
يتمثل أحد الأساليب الأخرى في تحويل تمثيل الوسيط (IR) أولًا إلى رسم بياني ، ثم تغطية هذا الرسم باستخدام أنماط . النمط عبارة عن قالب يُطابق جزءًا من الرسم البياني، ويمكن تنفيذه بتعليمات واحدة تُوفرها الآلة المستهدفة. الهدف هو تغطية الرسم البياني بحيث يتم تقليل التكلفة الإجمالية للأنماط المختارة، حيث تُمثل التكلفة عادةً عدد الدورات اللازمة لتنفيذ التعليمات. بالنسبة للرسوم البيانية الشجرية، يمكن إيجاد التغطية الأقل تكلفة في وقت خطي باستخدام البرمجة الديناميكية [ 11 ] ، أما بالنسبة للرسوم البيانية الموجهة غير الدورية (DAGs ) والرسوم البيانية الكاملة، فتُصبح المسألة من فئة NP-complete، وبالتالي غالبًا ما تُحل باستخدام الخوارزميات الجشعة أو طرق التحسين التوافقي [ 12 ] [ 13 ] [ 14 ] .
مراجع
- ↑ بلينديل، غابرييل س. هيورت (2013). دراسة استقصائية حول اختيار أساليب التدريس: مراجعة شاملة وحديثة للأدبيات (تقرير). arXiv : 1306.4898 . ISBN 978-91-7501-898-0.
- ↑ بليندل، غابرييل س. هيورت (2016). اختيار التعليمات: المبادئ والأساليب والتطبيقات . سبرينغر. doi : 10.1007/978-3-319-34019-7 . ISBN 978-3-319-34017-3. S2CID 13390131 .
- ↑ براون، ب. (1969). "دراسة استقصائية للمعالجات الكلية". المراجعة السنوية في البرمجة الآلية . 6 (2): 37-88 . doi : 10.1016/0066-4138(69)90001-9 . ISSN 0066-4138 .
- ↑ كاتيل، آر جي جي (1979). "دراسة ونقد لبعض نماذج توليد الشفرة" (ملف PDF) . كلية علوم الحاسوب، جامعة كارنيجي ميلون (تقرير فني). مؤرشف (ملف PDF) من الأصل في 23 مايو 2019.
- ↑ غاناباثي، م.؛ فيشر، س.ن.؛ هينيسي، ج.ل. (1982). "توليد كود المترجم القابل لإعادة الاستهداف". دراسات الحوسبة . 14 (4): 573-592 . doi : 10.1145/356893.356897 . ISSN 0360-0300 . S2CID 2361347 .
- ↑ لونيل، هـ. (1983). أنظمة كتابة مولدات الشفرات (أطروحة دكتوراه). لينشوبينغ، السويد: جامعة لينشوبينغ.
- ^ عمان، يو. نوري، كيلو فولت. جنسن، ك.؛ ناجيلي، هـ. (1974). “ملاحظات تنفيذ مترجم PASCAL (P)”. معاهد المعلوماتية (التقرير الفني).
- ↑ أورغاس، آر جيه؛ وايت، دبليو إم (1969). "أساس لنظام برمجة متنقل" . اتصالات رابطة آلات الحوسبة . 12 (9): 507-510 . doi : 10.1145/363219.363226 . S2CID 8164996 .
- ↑ ويلكوكس، تي آر (1971). توليد شفرة الآلة للغات البرمجة عالية المستوى (أطروحة دكتوراه). إيثاكا، نيويورك، الولايات المتحدة الأمريكية: جامعة كورنيل.
- ↑ ديفيدسون، جيه دبليو؛ فريزر، سي دبليو (1984). "اختيار الكود من خلال تحسين كود الكائن". معاملات ACM في لغات البرمجة والأنظمة . 6 (4): 505-526 . CiteSeerX 10.1.1.76.3796 . doi : 10.1145/1780.1783 . ISSN 0164-0925 . S2CID 10315537 .
- ↑ أهو، أ. ف.؛ غاناباثي، م.؛ تجيانغ، س. و. ك. (1989). "توليد الشفرة باستخدام مطابقة الشجرة والبرمجة الديناميكية". معاملات ACM في لغات البرمجة والأنظمة . 11 (4): 491-516 . CiteSeerX 10.1.1.456.9102 . doi : 10.1145/69558.75700 . S2CID 1165995 .
- ↑ ويلسون، ت.؛ غريوال، ج.؛ هالي، ب.؛ بانيرجي، د. (1994). "نهج متكامل لتوليد التعليمات البرمجية القابلة لإعادة الاستهداف". وقائع الندوة الدولية السابعة حول توليف المستوى العالي . ص 70-75 . CiteSeerX 10.1.1.521.8288 . doi : 10.1109/ISHLS.1994.302339 . ISBN 978-0-8186-5785-6. S2CID 14384424 .
- ↑ باشفورد، ستيفن؛ لوبيرز، راينر (1999). "اختيار الكود المقيد لأنظمة DSPS ذات النقطة الثابتة". وقائع المؤتمر السادس والثلاثين لجمعية ACM/IEEE حول أتمتة التصميم - DAC '99 . الصفحات 817-822 . CiteSeerX 10.1.1.331.390 . doi : 10.1145/309847.310076 . ISBN 978-1581331097. S2CID 5513238 .
- ↑ فلوش، أ.؛ وولينسكي، س.؛ كوتشينسكي، ك. (2010). "الجدولة المدمجة واختيار التعليمات للمعالجات ذات بنية الخلايا القابلة لإعادة التكوين". وقائع المؤتمر الدولي الحادي والعشرين حول البنى والمعالجات الخاصة بالتطبيقات (ASAP'10) : 167-174 .
روابط خارجية
- تحسينات المُترجم
