Learning to Parallelize with OpenMP by Augmented Heterogeneous AST Representation
تقترح هذه الورقة البحثية Graph2Par، وهو نهج تعلم قائم على الرسوم البيانية (graph-based) يستخدم تمثيلاً معززاً وغير متجانس لشجرة الإعراب المجردة (AST) ومجموعة بيانات OMP_Serial التي تم إنشاؤها حديثاً لتحقيق دقة بنسبة 85% في اكتشاف حلقات OpenMP القابلة للتوازي، متفوقة بذلك على الأساليب المعتمدة على الرموز (token-based) المتقدمة حالياً.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
أصبحت الحواسيب الحديثة أشبه بمدن شاسعة من العمال الصغار، كل منهم قادر على أداء مهمة في جزء من الثانية. ولجعل هذه الآلات تعمل بسرعة، يجب على المبرمجين تعليمها إرسال العديد من العمال للقيام بالوظائف في نفس الوقت، بدلاً من اصطفافهم للعمل واحداً تلو الآخر. هذه الممارسة، المعروفة باسم "التوازي" (parallelization)، ضرورية للاستفادة القصوى من الأجهزة القوية اليوم. ومع ذلك، فإن إخبار الكمبيوتر بكيفية تقسيم عمله أمر صعب؛ فهو يتطلب فهماً عميقاً لكيفية اعتماد الأجزاء المختلفة من البرنامج على بعضها البعض. وإذا أخطأ المبرمج في التقدير، فقد يتعطل البرنامج أو يعطي إجابة خاطئة. وعلى مدى عقود، بنى الخبراء أدوات لتحديد فرص العمل الجماعي هذه تلقائياً، لكن هذه الأدوات غالباً ما تكون حذرة للغاية، فتفوت العديد من فرص تسريع العمل، أو ترتبك بسبب هياكل الكود المعقدة.
في دراسة حديثة، سعى الباحثون لتعليم الحواسيب التعرف على هذه الفرص بنفسها، باستخدام طريقة مستوحاة من كيفية تعلم الآلات لفهم اللغة. ركز الفريق، بقيادة "لي تشين" وزملاؤه في جامعة ولاية آيوا ومختبرات إنتل، على نوع محدد من التعليمات المستخدمة في لغة البرمجة "C" يسمى "OpenMP". تعمل هذه التعليمات كلوحات إرشادية، تخبر الكمبيوتر أين يمكن البدء في تشغيل عدة عمال في وقت واحد بأمان. كان التحدي هو أن الأدوات الموجودة، التي تعتمد على قواعد رياضية جامدة، غالسباً ما تفشل في رؤية الصورة الكاملة؛ فقد تفوت حلقة تكرارية (loop) قابلة للتوازي تماماً لمجرد أنها تحتوي على استدعاء لدالة أو هيكل متداخل يبدو معقداً للمحلل التقليدي. أدرك الباحثون أنه لحل هذه المشكلة، يحتاجون إلى طريقة جديدة لإظهار كيف يبدو الكود فعلياً، ليس فقط كسلسلة من الكلمات، بل كخريطة لهيكله ومعناه.
ولمعالجة ذلك، كان على الفريق أولاً بناء مكتبة ضخمة من الأمثلة، وهي مجموعة بيانات أطلقوا عليها اسم "OMP Serial". جمعوا ما يقرب من 18,600 مثال للحلقات التكرارية التي تم تحديدها بالفعل كمتوازية، وحوالي 14,000 حلقة غير متوازية. استخرجوا هذه الأمثلة من آلاف البرامج الواقعية الموجودة على الإنترنت، بالإضافة إلى أمثلة اصطناعية مصممة بعناية لاختبار أنماط محددة. منحتهم هذه المجموعة أرضية غنية للتعلم منها. لكن امتلاك البيانات كان نصف المعركة فقط؛ فقد كانوا بحاجة إلى طريقة لتغذية نموذج تعلم الآلة بها بحيث يمكنه فهم الكود حقاً. وبدلاً من معاملة الكود كجملة في كتاب، حيث يهم ترتيب الكلمات أكثر، قرروا معاملته كخريطة معقدة. لقد أنشأوا تمثيلاً يسمى "شجرة بناء الجملة المجردة غير المتجانسة والمزيدة" (augmented heterogeneous abstract syntax tree). وبتعبير بسيط، هذا رسم بياني مفصل يربط كل قطعة من الكود؛ فهو لا يظهر فقط التسلسل الهرمي للبرنامج — مثل أمر أب وأوامر تابعة له — بل يظهر أيضاً كيف يتدفق الكود من خطوة إلى أخرى وكيف تقع كلمات الكود بجانب بعضها البعض في النص. تلتقط هذه الخريطة الهيكل العظمي للبرنامج مع الحفاظ أيضاً على العلاقات الدقيقة بين أجزائه المختلفة التي قد تفقدها قائمة بسيطة من الكلمات.
ومع هذه الخريطة الجديدة، درب الباحثون نموذج تعلم متطور يُعرف باسم "محول الرسم البياني غير المتجانس" (heterogeneous graph transformer). تخيل هذا النموذج كطالب يُعرض عليه آلاف هذه الخرائط، مع الإجابة الصحيحة لكل منها: ما إذا كانت الحلقة آمنة للتوازي أم لا. يتعلم النموذج رصد الأنماط الخفية التي تشير إلى الأمان؛ فهو ينتبه إلى الأنواع المختلفة من الروابط في الخريطة، مدركاً أن الرابط بين استدعاء دالة ومتغير قد يختلف في معناه عن الرابط بين عمليتين رياضيتين. وبمجرد تدريبه، تم اختبار قدرة النموذج على التنبؤ بالحلقات التي يمكن جعلها متوازية، والأهم من ذلك، تحديد نوع التعليمات المحدد الذي يجب استخدامه للقيام بذلك. كانت النتائج مذهلة؛ فقد حقق النموذج دقة بلغت 85 بالمائة في اكتشاف المناطق القابلة للتوازي، وهو ما يتفوق بشكل كبير على أفضل الأدوات الحالية التي تعتمد على التحليل الساكن التقليدي.
كشفت الدراسة أيضاً عن المواضع التي أخفقت فيها الأدوات القديمة بدقة. وجد الباحثون أن الأخطاء الأكثر شيوعاً التي ارتكبتها البرامج التقليدية حدثت في الحلقات التي تتضمن استدعاءات للدوال، والحلقات التي تختزل كمية كبيرة من البيانات في قيمة واحدة، والحلقات المتداخلة داخل حلقات أخرى. هذه هي الحالات الصعبة حيث يبدو الكود فوضوياً للمحلل الجامد، لكنه في الواقع آمن للعمل المتوازي. وفي المقابل، تعامل نهج تعلم الآلة الجديد مع هذه الهياكل المعقدة بنجاح أكبر بكثير. لم يكتفِ النموذج بالتخمين، بل تعلم المنطق الكامن وراء شكل الكود. أثبت الباحثون أنه من خلال الجمع بين رؤية هيكلية غنية للكود وخواروات تعلم قوية، من الممكن أتمتة مهمة تطلبت طويلاً حدساً بشرياً. يشير هذا العمل إلى أن مستقبل كتابة البرمجيات السريعة قد لا يكمن في وضع قواعد أفضل للحواسيب، بل في تعليمها رؤية الكود كما يراه المبرمج البشري الماهر: كنظام حي ومترابط وليس كتسلسل ثابت من الأوامر.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.