DeepMind مفتوح المصدر S6، وهي مكتبة مزودة بتطبيق مترجم JIT لـ CPython

قامت شركة DeepMind المعروفة بتطوراتها في مجال الذكاء الاصطناعي بفتح الكود المصدري لمشروع S6 الذي قام بتطوير مترجم JIT للغة بايثون. يعد المشروع مثيرًا للاهتمام لأنه مصمم كمكتبة ملحقة تتكامل مع CPython القياسي، مما يضمن التوافق الكامل مع CPython ولا يتطلب تعديل كود المترجم الفوري. المشروع يتطور منذ عام 2019 ولكن للأسف توقف ولم يعد قيد التطوير. وبما أن التطورات التي تم إنشاؤها قد تكون مفيدة لتحسين بايثون، فقد تقرر فتح الكود المصدري. كود مترجم JIT مكتوب بلغة C++ ويستند إلى CPython 3.7. وهو مفتوح المصدر بموجب ترخيص Apache 2.0.

فيما يتعلق بالمهام التي يمكنه حلها، يمكن مقارنة S6 لـ Python بمحرك V8 لـ JavaScript. تستبدل المكتبة معالج مترجم الكود الثانوي الحالي ceval.c بتطبيقه الخاص الذي يستخدم تجميع JIT لتسريع التنفيذ. يتحقق S6 مما إذا كانت الوظيفة الحالية قد تم تجميعها بالفعل، وإذا كان الأمر كذلك، فسيتم تنفيذ التعليمات البرمجية المترجمة، وإذا لم يكن الأمر كذلك، يقوم بتشغيل الوظيفة في وضع تفسير الرمز الثانوي، على غرار مترجم CPython. أثناء الترجمة الفورية، يتم حساب عدد التعليمات والمكالمات المنفذة المرتبطة بالوظيفة التي تتم معالجتها. بعد الوصول إلى مرحلة معينة، تبدأ عملية التجميع لتسريع التعليمات البرمجية التي يتم تنفيذها بشكل متكرر. يتم تنفيذ التجميع في تمثيل strongjit وسيط، والذي، بعد التحسين، يتم تحويله إلى تعليمات الآلة للنظام المستهدف باستخدام مكتبة asmjit.

اعتمادًا على طبيعة عبء العمل، يُظهر S6 في ظل الظروف المثالية زيادة في سرعة تنفيذ الاختبار تصل إلى 9.5 مرة مقارنة بـ CPython العادي. عند تشغيل 100 تكرار لمجموعة اختبار Richards، لوحظ تسريع بمقدار 7x، وعند تشغيل اختبار Raytrace، الذي يتضمن كمية كبيرة من الحسابات الرياضية، لوحظ تسريع بمقدار 3-4.5x.

من بين المهام التي يصعب تحسينها باستخدام S6، المشاريع التي تستخدم C API، مثل NumPy، بالإضافة إلى العمليات المتعلقة بضرورة التحقق من أنواع عدد كبير من القيم. لوحظ أيضًا انخفاض الأداء بالنسبة للاستدعاءات الفردية للوظائف كثيفة الاستخدام للموارد بسبب استخدام تطبيق S6 غير المحسن لمترجم Python (لم يصل التطوير إلى مرحلة تحسين وضع الترجمة الفورية). على سبيل المثال، في اختبار Unpack Sequence، الذي يفك حزم مجموعات كبيرة من المصفوفات/الصفوف، مع استدعاء واحد هناك تباطؤ يصل إلى 5 مرات، ومع استدعاء دوري يكون الأداء 0.97 من CPython.

المصدر: opennet.ru

إضافة تعليق