DeepMind, חברה הידועה בעבודתה בתחום הבינה המלאכותית, פתחה את פרויקט S6 בקוד פתוח, שפיתח מהדר JIT עבור Python. הפרויקט בולט בעיצובו כספריית הרחבות שמשתלבת עם CPython המקורי, מה שמבטיח תאימות מלאה עם CPython ואינו דורש שינויים בקוד המפרש. הפרויקט היה בפיתוח מאז 2019, אך למרבה הצער, הוא הופסק ואינו מפותח עוד. מכיוון שהעבודה שנוצרה יכולה להיות שימושית לשיפור Python, הוחלט להשתמש בו בקוד פתוח. קוד המהדר JIT כתוב ב-C++, מבוסס על CPython 3.7, ומורשה תחת רישיון Apache 2.0.
מבחינת המשימות שהוא פותר, S6 עבור Python מושווה למנוע V8 עבור JavaScript. הספרייה מחליפה את מדריך interpreter bytecode הקיים ceval.c במימוש משלה, המשתמש בקומפילציה just-in-time (JIT) כדי להאיץ את הביצוע. S6 בודקת האם הפונקציה הנוכחית כבר קומפלה, ואם כן, מבצעת את הקוד הקומפל. אם לא, היא מפעילה את הפונקציה במצב interpreter bytecode, בדומה ל-CPython. במהלך הפירוש, נספר מספר ההוראות והקריאות שבוצעו הקשורות לפונקציה המעובדת. לאחר הגעה לסף מסוים, תהליך הקומפילציה מתחיל כדי להאיץ קוד שבוצע לעתים קרובות. הקומפילציה מתרחשת לייצוג ביניים strongjit, אשר לאחר אופטימיזציה מומר להוראות מכונה מקוריות עבור מערכת היעד באמצעות ספריית asmjit.
בהתאם לעומס העבודה, S6, בתנאים אופטימליים, מדגים ביצוע ביצועים מהיר עד פי 9.5 בהשוואה ל-CPython הסטנדרטי. הרצת 100 איטרציות של חבילת המבחנים של Richards מביאה לעלייה מהירה פי 7, בעוד שהרצת מבחנת המבחנים של Raytrace, הכוללת חישובים מתמטיים נרחבים, מביאה לעלייה מהירה פי 3-4.5.
משימות שקשה לייעל עם S6 כוללות פרויקטים המשתמשים ב-C API, כגון NumPy, ופעולות הדורשות בדיקת סוג של מספר רב של ערכים. ביצועים נמוכים נצפים גם עבור קריאות בודדות של פונקציות עתירות משאבים עקב השימוש של S6 במתפרש Python קנייני ולא ממוטב (הפיתוח טרם הגיע לשלב של אופטימיזציה של מצב הפירוש). לדוגמה, במבחן Unpack Sequence, אשר פורק קבוצות גדולות של מערכים/טאפלים, קריאה בודדת מאטה עד פי 5, בעוד שקריאה מחזורית מביאה לביצועים איטיים פי 0.97 מ-CPython.
מקור: OpenNet.ru
