لغة برمجة جديدة لمسرعات الأجهزة

اخلاء مسؤولية | DISCLAIMER
يحتاج قانون مور إلى عناق. أصبحت أيام حشو الترانزستورات على رقائق كمبيوتر صغيرة من السيليكون معدودة ، وتأتي أطواف النجاة – مسرعات الأجهزة – بثمن.
عند برمجة مسرع – عملية تقوم فيها التطبيقات بإلغاء تحميل مهام معينة على أجهزة النظام خاصة لتسريع هذه المهمة – يجب عليك إنشاء دعم برنامج جديد بالكامل. يمكن لمسرعات الأجهزة تشغيل مهام معينة بأحجام أكبر من وحدات المعالجة المركزية (CPU) ، لكن لا يمكن استخدامها خارج الصندوق. يحتاج البرنامج إلى استخدام تعليمات المسرعات بكفاءة لجعله متوافقًا مع نظام التطبيق بأكمله. يُترجم هذا إلى الكثير من العمل الهندسي الذي سيتعين بعد ذلك الحفاظ عليه لشريحة جديدة تقوم بترجمة الكود إليها ، بأي لغة برمجة.
الآن ، ابتكر علماء من مختبر علوم الكمبيوتر والذكاء الاصطناعي (CSAIL) التابع لمعهد ماساتشوستس للتكنولوجيا لغة برمجة جديدة تسمى “Exo” لكتابة كود عالي الأداء على مسرعات الأجهزة. يساعد Exo مهندسي الأداء المنخفض المستوى على تحويل البرامج البسيطة جدًا التي تحدد ما يريدون حسابه ، إلى برامج معقدة للغاية تفعل نفس الشيء مثل المواصفات ، ولكن بشكل أسرع بكثير باستخدام رقائق التسريع الخاصة هذه. يمكن للمهندسين ، على سبيل المثال ، استخدام Exo لتحويل عملية ضرب مصفوفة بسيطة إلى برنامج أكثر تعقيدًا ، والذي يدير أوامر الحجم بشكل أسرع باستخدام هذه المسرعات الخاصة.
على عكس لغات البرمجة والمجمعات الأخرى ، فإن Exo مبني على مفهوم يسمى “Exocompilation”. تقول يوكا إيكاراشي ، حاصلة على درجة الدكتوراه: “تقليديًا ، ركزت الكثير من الأبحاث على أتمتة عملية التحسين للأجهزة المحددة”. طالب في الهندسة الكهربائية وعلوم الكمبيوتر وشريك في CSAIL وهو مؤلف رئيسي لورقة بحثية جديدة حول Exo. “يعد هذا أمرًا رائعًا لمعظم المبرمجين ، ولكن بالنسبة لمهندسي الأداء ، فإن المترجم يقف في طريقه بقدر ما يساعد. نظرًا لأن تحسينات المترجم تكون تلقائية ، فلا توجد طريقة جيدة لإصلاحها عندما يفعل الشيء الخطأ ويمنحك 45 بالمائة الكفاءة بدلاً من 90 بالمائة “.
مع Exocompilation ، عاد مهندس الأداء إلى مقعد السائق. مسؤولية اختيار التحسينات التي سيتم تطبيقها ومتى وبأي ترتيب يتم إخراجها من المترجم إلى مهندس الأداء. بهذه الطريقة ، لن يضطروا إلى إضاعة الوقت في محاربة المترجم من ناحية ، أو القيام بكل شيء يدويًا من ناحية أخرى. في الوقت نفسه ، يتحمل Exo مسؤولية ضمان صحة كل هذه التحسينات. نتيجة لذلك ، يمكن لمهندس الأداء قضاء وقته في تحسين الأداء ، بدلاً من تصحيح أخطاء الكود المعقد والمحسن.
يقول Adrian Sampson ، الأستاذ المساعد في قسم علوم الكمبيوتر في جامعة كورنيل: “لغة Exo عبارة عن مترجم يتم تحديده وفقًا لمعايير الأجهزة التي تستهدفها ؛ ويمكن للمجمع نفسه التكيف مع العديد من مسرعات الأجهزة المختلفة”. “بدلاً من كتابة مجموعة من رموز C ++ الفوضوية لتجميعها من أجل مسرّع جديد ، يمنحك Exo طريقة مجردة وموحدة لكتابة” شكل “الجهاز الذي تريد استهدافه. ثم يمكنك إعادة استخدام مترجم Exo الحالي للتكيف إلى هذا الوصف الجديد بدلاً من كتابة شيء جديد تمامًا من البداية. التأثير المحتمل لعمل مثل هذا هائل: إذا توقف مبتكري الأجهزة عن القلق بشأن تكلفة تطوير مجمعين جدد لكل فكرة جديدة عن الأجهزة ، فيمكنهم تجربة وشحن المزيد من الأفكار . يمكن للصناعة أن تكسر اعتمادها على الأجهزة القديمة التي لا تنجح إلا بسبب قفل النظام البيئي وعلى الرغم من عدم كفاءتها “.
رقائق الكمبيوتر عالية الأداء المصنوعة اليوم ، مثل TPU من Google ، أو محرك Apple العصبي ، أو Tensor Cores من NVIDIA ، وتطبيقات الحوسبة العلمية والتعلم الآلي عن طريق تسريع شيء يسمى “البرامج الفرعية الرئيسية” ، أو النواة ، أو الحوسبة عالية الأداء (HPC) ) الإجراءات الفرعية.
وبغض النظر عن المصطلحات الشائكة ، فإن البرامج ضرورية. على سبيل المثال ، هناك شيء يسمى Basic Linear Algebra Subroutines (BLAS) هو “مكتبة” أو مجموعة من هذه الإجراءات الفرعية ، المخصصة لحسابات الجبر الخطي ، وتمكين العديد من مهام التعلم الآلي مثل الشبكات العصبية ، وتوقعات الطقس ، والحساب السحابي ، واكتشاف الأدوية . (تعتبر BLAS مهمة جدًا لدرجة أنها فازت بجائزة Jack Dongarra في عام 2021.) ومع ذلك ، فإن هذه الرقائق الجديدة – التي تتطلب مئات المهندسين لتصميمها – هي جيدة بالقدر الذي تسمح به مكتبات برامج HPC هذه.
في الوقت الحالي ، على الرغم من ذلك ، لا يزال هذا النوع من تحسين الأداء يتم يدويًا لضمان استخدام كل دورة أخيرة من العمليات الحسابية على هذه الرقائق. تعمل الإجراءات الفرعية لـ HPC بانتظام بنسبة تزيد عن 90 في المائة من الكفاءة النظرية القصوى ، ويبذل مهندسو الأجهزة جهودًا كبيرة لإضافة خمسة أو 10 في المائة إضافية من السرعة إلى هذه القمم النظرية. لذلك ، إذا لم يتم تحسين البرنامج بقوة ، فسيتم إهدار كل هذا العمل الشاق – وهو بالضبط ما يساعد Exo على تجنبه.
جزء رئيسي آخر من Exocompilation هو أن مهندسي الأداء يمكنهم وصف الرقائق الجديدة التي يريدون تحسينها ، دون الحاجة إلى تعديل المترجم. تقليديا ، يتم الحفاظ على تعريف واجهة الأجهزة من قبل مطوري المترجم ، ولكن مع معظم شرائح التسريع الجديدة هذه ، فإن واجهة الأجهزة هي ملكية خاصة. يتعين على الشركات الاحتفاظ بنسختها الخاصة (شوكة) من مترجم تقليدي كامل ، مع تعديله لدعم شرائحهم الخاصة. وهذا يتطلب تعيين فرق من مطوري المترجمين بالإضافة إلى مهندسي الأداء.
“في Exo ، نقوم بدلاً من ذلك بإضفاء الطابع الخارجي على تعريف الخلفيات الخاصة بالأجهزة من مترجم exocompiler. وهذا يعطينا فصلًا أفضل بين Exo – وهو مشروع مفتوح المصدر – ورمز خاص بالأجهزة – والذي غالبًا ما يكون مملوكًا. لقد أظهرنا يقول جيلبرت بيرنشتاين ، باحث ما بعد الدكتوراة في جامعة كاليفورنيا في بيركلي: “يمكننا استخدام Exo لكتابة التعليمات البرمجية بسرعة بأداء مثل مكتبة الرياضيات Kernel المحسّنة يدويًا من Intel. نحن نعمل بنشاط مع المهندسين والباحثين في العديد من الشركات”.
يستلزم مستقبل Exo استكشاف لغة وصفية أكثر إنتاجية للجدولة ، وتوسيع دلالاتها لدعم نماذج البرمجة الموازية لتطبيقها على المزيد من المسرّعات ، بما في ذلك وحدات معالجة الرسومات.
كتب إيكاراشي وبرنشتاين الورقة جنبًا إلى جنب مع أليكس رينكينج وحسن جينك ، وكلاهما دكتوراه. طلاب في جامعة كاليفورنيا في بيركلي ، والأستاذ المساعد في معهد ماساتشوستس للتكنولوجيا جوناثان راجان كيلي.





