S6 منبع باز DeepMind، کتابخانه ای با پیاده سازی کامپایلر JIT برای CPython

DeepMind که به خاطر پیشرفت‌های خود در زمینه هوش مصنوعی شناخته می‌شود، کد منبع پروژه S6 را باز کرده است که یک کامپایلر JIT برای زبان پایتون توسعه داده است. این پروژه جالب است زیرا به عنوان یک کتابخانه افزونه طراحی شده است که با CPython استاندارد ادغام می شود و سازگاری کامل با CPython را تضمین می کند و نیازی به تغییر کد مفسر ندارد. این پروژه از سال 2019 در حال توسعه است، اما متاسفانه متوقف شد و دیگر در حال توسعه نیست. از آنجایی که پیشرفت های ایجاد شده ممکن است برای بهبود پایتون مفید باشد، تصمیم گرفته شد که کد منبع باز شود. کد کامپایلر JIT به زبان C++ نوشته شده است و بر اساس CPython 3.7 است. و تحت مجوز آپاچی 2.0 منبع باز است.

از نظر وظایفی که می تواند حل کند، S6 برای پایتون با موتور V8 برای جاوا اسکریپت مقایسه می شود. کتابخانه کنترل کننده مفسر بایت کد ceval.c را با پیاده سازی خود جایگزین می کند که از کامپایل JIT برای سرعت بخشیدن به اجرا استفاده می کند. S6 بررسی می کند که آیا تابع فعلی قبلاً کامپایل شده است یا خیر و اگر چنین است، کد کامپایل شده را اجرا می کند، و اگر نه، تابع را در حالت تفسیر بایت کد، مشابه مفسر CPython اجرا می کند. در طول تفسیر، تعداد دستورالعمل‌های اجرا شده و فراخوان‌های مرتبط با تابع در حال پردازش شمارش می‌شود. پس از رسیدن به یک نقطه عطف خاص، یک فرآیند کامپایل برای سرعت بخشیدن به کدهای مکرر اجرا شده آغاز می شود. کامپایل به یک نمایش قوی‌جیت میانی انجام می‌شود که پس از بهینه‌سازی، با استفاده از کتابخانه asmjit به دستورالعمل‌های ماشینی سیستم هدف تبدیل می‌شود.

بسته به ماهیت حجم کار، S6 در شرایط بهینه افزایش سرعت اجرای تست را تا 9.5 برابر نسبت به CPython معمولی نشان می دهد. هنگام اجرای 100 تکرار از مجموعه تست ریچاردز، سرعت 7 برابری مشاهده می شود و هنگام اجرای تست Raytrace که شامل مقدار زیادی محاسبات ریاضی است، سرعت 3-4.5 برابر مشاهده می شود.

از جمله کارهایی که بهینه سازی آنها با استفاده از S6 دشوار است، پروژه هایی هستند که از C API استفاده می کنند، مانند NumPy و همچنین عملیات مربوط به نیاز به بررسی انواع تعداد زیادی از مقادیر. به دلیل استفاده از پیاده سازی بهینه نشده خود S6 از مفسر پایتون (توسعه به مرحله بهینه سازی حالت تفسیر نرسیده است) عملکرد پایینی نیز برای فراخوانی منفرد توابع فشرده منابع مشاهده می شود. به عنوان مثال، در تست Unpack Sequence، که مجموعه‌های بزرگی از آرایه‌ها/تاپل‌ها را باز می‌کند، با یک تماس تا 5 برابر کاهش می‌یابد و با یک تماس چرخه‌ای، عملکرد CPython 0.97 است.

منبع: opennet.ru

اضافه کردن نظر