Một backend biên dịch mới có tên TPDE-LLVM đã được phát hành dưới dạng mã nguồn mở, hứa hẹn sẽ tăng tốc độ biên dịch một cách đáng kể trong khi vẫn duy trì hiệu suất thời gian chạy tương tự như backend LLVM -O0 tiêu chuẩn. Dự án này giải quyết một trong những khiếu nại dai dẳng nhất trong phát triển phần mềm hiện đại: thời gian biên dịch chậm làm giảm năng suất của nhà phát triển.
Cải Tiến Tốc Độ Biên Dịch Mang Tính Cách Mạng
TPDE-LLVM mang lại tốc độ biên dịch nhanh hơn 10-20 lần so với backend LLVM -O0 trên nhiều bộ benchmark khác nhau từ bộ SPEC CPU 2017. Kết quả ấn tượng nhất cho thấy tốc độ tăng hơn 26 lần đối với một số khối lượng công việc nhất định như omnetpp và xalanc. Điều này đại diện cho một bước đột phá đáng kể trong công nghệ biên dịch, vì các phương pháp truyền thống để tăng tốc LLVM đã mang lại những cải tiến nhỏ hơn nhiều.
Backend này đạt được những kết quả này thông qua phương pháp ba lượt được tối ưu hóa: dọn dẹp và chuẩn bị IR, phân tích cho vòng lặp và tính sống của biến, và một lượt tạo mã kết hợp xử lý việc hạ cấp, phân bổ thanh ghi và mã hóa mã máy đồng thời. Thiết kế này loại bỏ phần lớn chi phí phụ có trong các kiến trúc biên dịch truyền thống.
IR (Intermediate Representation): Một ngôn ngữ lập trình cấp thấp được sử dụng nội bộ bởi các trình biên dịch Phân bổ thanh ghi: Quá trình gán các biến chương trình vào các thanh ghi của bộ xử lý
Kết quả Benchmark SPEC CPU 2017 (x86-64)
Benchmark | Tăng tốc Thời gian Biên dịch (-O0 IR) | Tỷ lệ Kích thước Code (-O0 IR) |
---|---|---|
600.perl | 11.39x | 1.27x |
602.gcc | 12.54x | 1.32x |
605.mcf | 9.72x | 1.27x |
620.omnetpp | 21.46x | 1.24x |
623.xalanc | 18.99x | 1.24x |
625.x264 | 10.52x | 1.26x |
631.deepsjeng | 9.60x | 1.25x |
641.leela | 21.44x | 1.24x |
657.xz | 10.95x | 1.30x |
Trung bình Hình học | 13.34x | 1.27x |
Phản Hồi Từ Cộng Đồng và Tiềm Năng Áp Dụng
Cộng đồng biên dịch đã thể hiện sự quan tâm đáng kể đối với phương pháp của TPDE-LLVM , với một số nhà phát triển bày tỏ sự ngạc nhiên về việc thiếu sự áp dụng rộng rãi của những kỹ thuật này. Công nghệ này dường như mang lại những lợi thế rõ ràng so với các giải pháp hiện có như Cranelift và các backend WebAssembly , dẫn đến những câu hỏi về lý do tại sao các dự án biên dịch chính thống chưa vội vàng tích hợp các phương pháp tương tự.
Một lĩnh vực đặc biệt được quan tâm là biên dịch WebAssembly , nơi các nhà phát triển đang xem xét TPDE-LLVM như một sự thay thế tiềm năng cho các giải pháp biên dịch nhanh hiện có. Khả năng hoạt động như một thư viện của backend này làm cho nó phù hợp cho các tình huống biên dịch just-in-time, mở ra những khả năng mới cho việc tạo mã thời gian chạy.
Hạn Chế Hiện Tại và Phát Triển Tương Lai
TPDE-LLVM hiện tại chỉ hỗ trợ kiến trúc x86-64 và AArch64 và triển khai một tập con các tính năng biểu diễn trung gian của LLVM . Các nhà phát triển thừa nhận rằng trong khi backend hoạt động tốt với mã C và C++ điển hình được tạo bởi Clang , nó có những hạn chế với các tính năng ngôn ngữ kỳ lạ hơn và một số mã Rust sử dụng các loại vector không chuẩn.
Lộ trình của dự án bao gồm việc thêm hỗ trợ gỡ lỗi thông qua triển khai định dạng DWARF và cải thiện phân bổ thanh ghi vượt ra ngoài phương pháp spill everything hiện tại. Các nền tảng và mô hình mã bổ sung có thể được thêm vào nếu có đủ nhu cầu từ cộng đồng.
Các Hạn Chế Hiện Tại và Tính Năng Chưa Được Hỗ Trợ
- Hỗ trợ ngôn ngữ: Hoạt động tốt với mã C/C++ thông thường của Clang , hỗ trợ một phần Flang , khả năng tương thích hạn chế với Rust
- Các tính năng còn thiếu: Nhiều tính năng của LLVM-IR chưa được triển khai
- Các phép toán vector: Không hỗ trợ các kiểu vector bất hợp pháp (ảnh hưởng đến một số crate của Rust )
- Phân bổ thanh ghi: Hiện tại sử dụng phương pháp "spill everything"
- Gỡ lỗi: Hỗ trợ DWARF đang ở giai đoạn nguyên mẫu
- Hạn chế nền tảng: Chỉ hỗ trợ ELF , chỉ hỗ trợ mô hình mã small-PIC
Thách Thức Kỹ Thuật và Cải Tiến LLVM
Quá trình phát triển đã tiết lộ một số nút thắt hiệu suất trong cơ sở hạ tầng của LLVM ảnh hưởng đến tốc độ biên dịch. Các vấn đề như lặp successor chậm cho các câu lệnh switch và các thao tác thời gian bậc hai cho các khối có nhiều predecessor đã đòi hỏi những giải pháp sáng tạo. Thú vị là, khoảng 90% thời gian biên dịch trong công cụ của họ được dành cho việc phân tích bitcode thay vì tạo mã thực tế.
Nhóm TPDE-LLVM cũng đã đóng góp vào việc làm cho LLVM tiêu chuẩn nhanh hơn, đạt được cải thiện tốc độ 18% trong các phiên bản gần đây. Tuy nhiên, họ tin rằng việc đạt được những cải tiến tốc độ đáng kể được thể hiện bởi phương pháp của họ sẽ đòi hỏi những thay đổi cơ bản đối với kiến trúc của LLVM vượt ra ngoài các tối ưu hóa từng bước.
Tham khảo: TPDE-LLVM: 10-20x Faster LLVM -00 Back-End