Họ đề xuất một trình biên dịch cho Python sử dụng kỹ thuật Copy-and-Patch

Logo Python

Python là một ngôn ngữ lập trình cấp cao.

Gần đây một trong những chính Các nhà phát triển CPython đã tiết lộ trình biên dịch JIT mới cho Python sử dụng kỹ thuật Sao chép và vá, đó là một kỹ thuật biên soạn mới và sáng tạo đó là nổi bật về tốc độ, dễ bảo trì và sự tích hợp hoàn toàn của nó với trình thông dịch hiện có.

Sao chép và vá lỗi dựa trên việc sử dụng thư viện được xác định trước các đoạn mã nhị phân được gọi là "mẫu" để xuất mã máy được tối ưu hóa. Các mẫu này là các triển khai dựng sẵn của các nút AST (Cây cú pháp trừu tượng) hoặc mã byte chứa các giá trị bị thiếu, chẳng hạn như các chữ ngay lập tức, độ lệch biến ngăn xếp cũng như các mục tiêu nhánh và lệnh gọi.

Nó cho phép bạn tạo các biến thể của mẫu nhị phân trong C++ một cách có hệ thống một cách rõ ràng và thuần túy. Sử dụng cơ sở hạ tầng trình biên dịch Clang+LLVM để ẩn chi tiết nền tảng cụ thể ở mức độ thấp.

Trong thời gian chạy, tối ưu hóa và tạo mã trở thành nhiệm vụ đơn giản hơnl Tìm bảng dữ liệu chứa mẫu thích hợp, tạo một phiên bản của mẫu đó và đặt nó vào vị trí mong muốn bằng quy trình Sao chép và vá, điều chỉnh mọi giá trị bị thiếu sẽ được vá trong thời gian chạy.

Nhìn từ góc độ đơn giản hơn, nó bao gồm việc biên dịch (Sao chép) mã nguồn hiện có và điều chỉnh các giá trị còn thiếu hoặc sửa đổi cụ thể (Bản vá).

Sao chép và vá tạo điều kiện thuận lợi đáng kể cho việc chuyển đổi tự động trình thông dịch được viết bằng ngôn ngữ C trong trình biên dịch JIT, loại bỏ nhu cầu tạo các biểu diễn logic và biên dịch tạo mã riêng biệt. Bằng cách sử dụng một trình tạo mã phổ biến, việc sửa lỗi trong trình thông dịch sẽ tự động giải quyết các vấn đề tương tự trong JIT.

Cách tiếp cận Sao chép và vá dựa vào sự giống nhau giữa việc định vị lại mã trong bộ nhớ Khi trình liên kết tải các tệp đối tượng và thay thế các lệnh máy thay vì mã byte trong JIT là các tác vụ tương tự. Trong quá trình thực hiện chương trình, lCác hướng dẫn mã byte do trình thông dịch tạo ra được liệt kê, và mã máy được biên dịch trước được sao chép cho mỗi lệnh vào vùng bộ nhớ thực thi, sau đó trong số này các hướng dẫn Chúng được sửa đổi linh hoạt để thay thế dữ liệu đã xử lý trong thời gian thực. Trong trường hợp JIT, các mẫu được xác định trước sẽ được sao chép từ các hàm đã được biên dịch và được thay thế bằng các giá trị cần thiết, chẳng hạn như đối số và hằng số).

Việc triển khai JIT bằng kỹ thuật Sao chép và vá lỗi liên quan đến việc biên dịch một tệp đối tượng ở định dạng ELF hoặcsử dụng LLVM. Tệp bị phản đối này chứa thông tin về hướng dẫn mã byte và chi tiết về việc thay thế dữ liệu cần thiết. Trong quá trình thực thi, JIT thay thế các hướng dẫn mã byte do trình thông dịch tạo ra bằng các biểu diễn mã máy, đồng thời điều chỉnh dữ liệu cần thiết cho việc tính toán. Mặc dù việc triển khai JIT yêu cầu LLVM làm phần phụ thuộc trong quá trình biên dịch, nhưng các thành phần thời gian chạy không bị ràng buộc với các phần phụ thuộc bên ngoài, giảm xuống còn khoảng 300 dòng mã C viết tay và 3000 dòng mã C được tạo.

Về hiệu suất, JIT được đề xuất với kỹ thuật Copy-and-Patch trình bày những cải tiến đáng chú ý so với các cách tiếp cận truyền thống. Khi so sánh với JIT thông thường (LLVM -O0), nó nổi bật với khả năng tạo mã nhanh hơn 100 lần và kết quả là mã Nó hiệu quả hơn 15%. Trong lĩnh vực biên dịch WebAssugging (Liftoff), JIT mới thể hiện khả năng tạo mã nhanh hơn gấp 5 lần và mã kết quả chạy nhanh hơn 50%.

Khi so sánh với JIT tối ưu hóa như LuaJIT, sử dụng mã lắp ráp được viết thủ công, JIT được đề xuất vượt trội hơn ở 13 trên 44 thử nghiệm. Mặc dù trung bình nó tụt lại phía sau về hiệu suất 35%, nhưng cần nhấn mạnh rằng sự khác biệt này được bù đắp bằng sự đơn giản hóa đáng kể trong việc bảo trì và giảm độ phức tạp khi triển khai. Sự cân bằng giữa hiệu suất và hiệu quả trong việc quản lý mã đã định vị JIT được đề xuất như một giải pháp thay thế hấp dẫn trong bối cảnh hiệu suất.

Chung kếtvà nếu bạn muốn tìm hiểu thêm về nó, bạn có thể kiểm tra các chi tiết Trong liên kết sau đây.


Để 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.