DeepMind đã phát hành mã nguồn cho S6, một trình biên dịch JIT cho Python

s6-deepmind

S6, là một thư viện trình biên dịch JIT độc lập cho CPython

sâu sắc, được biết đến với những phát triển trong lĩnh vực trí tuệ nhân tạo, gần đây đã thông báo rằng đã đưa ra quyết định phát hành mã nguồn của dự án S6, được anh ấy phát triển từ trình biên dịch JIT cho ngôn ngữ Python.

Dự án thú vị được thiết kế như một thư viện mở rộng có thể được tích hợp với CPython tiêu chuẩn, cung cấp khả năng tương thích CPython đầy đủ và không yêu cầu sửa đổi của mã thông dịch viên. Dự án đã được phát triển từ năm 2019, nhưng rất tiếc đã bị thu hẹp quy mô lại và không còn trong quá trình phát triển.

S6 là một dự án bắt đầu trong DeepMind vào năm 2019 để tăng tốc CPython với biên dịch đúng lúc ("JIT"). Các hàm này sẽ được cung cấp như một thư viện Python bình thường và không cần thay đổi trình thông dịch CPython. S6 dự định làm cho Python những gì V8 đã làm cho Javascript (tên là một sự kính trọng đối với V8). Công việc dựa trên CPython phiên bản 3.7. Tùy thuộc vào khối lượng công việc, chúng tôi đã thấy tốc độ tăng lên đến 9.5 lần trong các điểm chuẩn thông thường.

Lý do chính khiến nó quyết định phát hành mã nguồn, một trong số chúng và như đã đề cập là dự án ngừng hỗ trợ, một trong những lý do chính khác được đưa ra là dựa trên những phát triển đã tạo, chúng vẫn có thể hữu ích để cải thiện python .

Chúng tôi đã ngừng hoạt động trên S6 trong nội bộ. Do đó, kho lưu trữ này đã được lưu trữ và chúng tôi không chấp nhận các yêu cầu hoặc sự cố kéo. Chúng tôi mở nguồn và cung cấp tổng quan thiết kế bên dưới để kích thích các cuộc trò chuyện trong cộng đồng Python và truyền cảm hứng cho công việc cải tiến Python trong tương lai.

Về hoạt động của S6, chúng ta nên đề cập rằng S6 cho Python so với động cơ V8 cho JavaScript về các nhiệm vụ nó giải quyết. Thư viện thay thế trình điều khiển trình thông dịch bytecode ceval.c hiện có bằng triển khai riêng của nó sử dụng biên dịch JIT để tăng tốc độ thực thi.

S6 kiểm tra xem chức năng hiện tại đã được biên dịch chưa và, nếu vậy, thực thi mã đã biên dịch, và nếu không, thực thi chức năng trong chế độ thông dịch bytecode tương tự như trình thông dịch CPython. Việc diễn giải đếm số lượng các câu lệnh được thực thi và các lệnh gọi được liên kết với hàm đang được xử lý.

Sau khi đạt đến một mốc nhất định, quá trình xây dựng được bắt đầu để tăng tốc mã thường xuyên chạy. Quá trình biên dịch được thực hiện trên đại diện trung gian strongjit, sau khi tối ưu hóa, được chuyển đổi thành các lệnh máy hệ thống đích bằng cách sử dụng thư viện asmjit.

Tùy thuộc vào tính chất của tải, trong điều kiện tối ưu, S6 cho thấy tốc độ thực thi thử nghiệm tăng lên đến 9,5 lần so với CPython thông thường.

Khi 100 lần lặp được thực hiện từ bộ thử nghiệm Richards, có gia tốc gấp 7 lần, và khi chạy bài kiểm tra Raytrace, chứa rất nhiều phép toán, nó nhanh hơn từ 3 đến 4,5 lần.

Các tác vụ khó tối ưu hóa với S6 là các dự án sử dụng C API, chẳng hạn như NumPy, cũng như các hoạt động liên quan đến nhu cầu kiểm tra các kiểu của một số lượng lớn các giá trị.

Hiệu suất kém cũng được thấy đối với các cuộc gọi chức năng đơn lẻ tiêu tốn rất nhiều tài nguyên do việc sử dụng trình thông dịch Python S6 chưa được tối ưu hóa (quá trình phát triển chưa đạt đến giai đoạn tối ưu hóa chế độ phiên dịch).

Ví dụ: trong thử nghiệm Unpack Sequence, giải nén các tập hợp lớn các mảng / bộ dữ liệu, một lệnh gọi hiển thị tốc độ chậm lên đến 5 lần và một lệnh gọi theo chu kỳ mang lại 0,97 từ CPython.

Cuối cùng cho những người quan tâm muốn biết thêm về nó, bạn nên biết rằng mã trình biên dịch JIT được viết bằng C ++ và hiện đang dựa trên CPython 3.7, ngoài ra thực tế là mã nguồn đã được mở theo giấy phép Apache 2.0 và có thể tham khảo từ liên kết bên dưới.


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.