Nhìn lại 2 năm của trình biên dịch JIT trong CPython: hiện trạng, điều còn tiếc nuối và tương lai
(fidget-spinner.github.io)Đây là bài nhìn lại và phân tích thẳng thắn từ một nhà phát triển đã tham gia hơn 2 năm vào việc phát triển trình biên dịch JIT (Just-In-Time) của CPython.
Bài viết chia sẻ tình hình hiện tại của dự án dựa trên kinh nghiệm trong 2~3 năm qua của một nhà phát triển đã đóng góp trọng yếu cho trình biên dịch JIT của CPython, đặc biệt là phần tối ưu hóa (optimizer).
Những điểm tích cực: phát triển dựa vào cộng đồng và đào tạo
- Xây dựng cộng đồng: Ban đầu chỉ có một số ít nhà phát triển dẫn dắt dự án, nhưng hiện nay dự án đang được vận hành theo hướng cộng đồng dù đội Faster CPython của Microsoft đã giải thể. Các cộng tác viên nòng cốt mới như Savannah, Tomáš, Diego đã tham gia, và đây là nỗ lực có chủ đích nhằm bảo đảm tính bền vững lâu dài cho dự án JIT.
- JIT dễ đào tạo: JIT được thiết kế để ngay cả những người đóng góp mới không có kiến thức chuyên sâu về trình biên dịch cũng có thể dễ dàng học và tham gia. Ví dụ, việc áp dụng cách tiếp cận 'tracing JIT' giúp có thể hiểu hệ thống chỉ với phân tích tĩnh trên một khối cơ bản đơn lẻ, thay vì phải xử lý toàn bộ đồ thị luồng điều khiển phức tạp, từ đó hạ thấp rào cản gia nhập.
Điều còn tiếc nuối: hiệu năng và tin bài báo chí sai lệch - Vấn đề hiệu năng: Nói thẳng ra, JIT trong CPython 3.13 là chậm. Khi build bằng trình biên dịch mới nhất (Clang 20), JIT trong nhiều trường hợp còn chậm hơn trình thông dịch, và chỉ khi dùng trình biên dịch cũ hơn (GCC 11) thì mới đạt mức hiệu năng tương đương. Phiên bản 3.14 cũng không có bước nhảy vọt lớn về hiệu năng vì trọng tâm là đào tạo cộng tác viên mới và mở rộng phân tích kiểu hiện có. Tác giả tin rằng ưu tiên bồi dưỡng nhân lực dài hạn thay vì tăng tốc ngắn hạn là lựa chọn đúng đắn hơn.
- Tin bài không chính xác: Ban đầu báo chí đưa tin rằng JIT nhanh hơn trình thông dịch "2-9%", nhưng điều này không đúng sự thật. Con số đó không phải là kết quả so với trình thông dịch CPython thực tế, mà là so với một 'tier 2 interpreter' rất chậm dùng để thực thi biểu diễn trung gian (IR) của JIT. Vì vậy người dùng đã có kỳ vọng sai về JIT, trong khi trên thực tế nhiều trường hợp lại bị giảm hiệu năng, và tác giả nói rằng điều này khiến mình vô cùng thất vọng.
Kết luận và triển vọng tương lai
Tác giả vẫn giữ sự lạc quan về JIT. Một cộng đồng mạnh đã được hình thành, và hiện nhiều công việc tối ưu hóa đang diễn ra song song. Tác giả kỳ vọng những nỗ lực này sẽ mang lại mức cải thiện tốc độ ở ngưỡng phần trăm một chữ số theo trung bình nhân hình học của benchmark trong phiên bản 3.14.
Tác giả kết lại rằng "nếu thực sự có vấn đề 'xấu xí' (ugly), tôi đã không tiếp tục làm JIT nữa", và khép lại bài viết với triển vọng tích cực rằng JIT sẽ tiếp tục phát triển nhờ sức mạnh của cộng đồng.
Chưa có bình luận nào.