Trình biên dịch Stalin tối ưu hóa một cách tàn nhẫn, nhưng làm thế nào?


14

Tuyên bố nghiên cứu của JM Siskind nêu rõ:

Stalin là một trình biên dịch tối ưu hóa cho Đề án thực hiện phân tích tĩnh toàn chương trình và sử dụng kết quả của phân tích đó để tạo mã cực kỳ hiệu quả. Stalin sử dụng một bộ sưu tập lớn các kỹ thuật phân tích tĩnh. Nó thực hiện một hình thức mới của phân tích dòng chảy đa biến sử dụng phân tích dòng chảy đơn dòng lặp để thực hiện phân tách theo hướng dòng chảy: nhân bản các bản sao thủ tục chuyên biệt và gán mục tiêu theo địa điểm cho các bản sao đó. Nó sử dụng các kết quả của phân tích dòng chảy để thực hiện phân tích thời gian sống, phân tích thoát, phân tích điểm và phân tích bí danh. Các phân tích này hỗ trợ một hình thức chuyển đổi đóng cửa nhẹ mới giúp loại bỏ hầu hết các vị trí đóng, sử dụng các kỹ thuật như toàn cầu hóa và nội địa hóa, nén backchain tĩnh và thường loại bỏ hầu hết các lần đóng khỏi chương trình. Nó cũng sử dụng các phân tích ở trên để hỗ trợ quản lý lưu trữ theo vùng theo dòng chảy, trong đó bộ sưu tập rác thời gian chạy được thay thế bằng phân bổ tĩnh và phân bổ trên cơ sở theo giá trị trừu tượng và theo từng chương trình. Nó cũng thực hiện chuyển đổi CPS nhẹ theo dòng chảy, sử dụng các phần mở rộng của các kỹ thuật được tiên phong với Screamer, để hỗ trợ các phần tiếp theo hạng nhất cực kỳ hiệu quả. Cuối cùng, nó hỗ trợ lựa chọn đại diện theo dòng chảy và lựa chọn đại diện ở mức độ thấp để chọn triển khai (hoặc không thực hiện) các thẻ, kiểm tra thẻ và gửi thẻ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Điều này giúp loại bỏ hầu hết các thẻ thời gian chạy, kiểm tra thẻ, gắn thẻ, tước thẻ, gửi thẻ, đấm bốc và bỏ hộp khỏi các chương trình. trong đó bộ sưu tập rác thời gian chạy được thay thế bằng phân bổ tĩnh và phân bổ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Nó cũng thực hiện chuyển đổi CPS nhẹ theo dòng chảy, sử dụng các phần mở rộng của các kỹ thuật được tiên phong với Screamer, để hỗ trợ các phần tiếp theo hạng nhất cực kỳ hiệu quả. Cuối cùng, nó hỗ trợ lựa chọn đại diện theo dòng chảy và lựa chọn đại diện ở mức độ thấp để chọn triển khai (hoặc không thực hiện) các thẻ, kiểm tra thẻ và gửi thẻ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Điều này giúp loại bỏ hầu hết các thẻ thời gian chạy, kiểm tra thẻ, gắn thẻ, tước thẻ, gửi thẻ, đấm bốc và bỏ hộp khỏi các chương trình. trong đó bộ sưu tập rác thời gian chạy được thay thế bằng phân bổ tĩnh và phân bổ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Nó cũng thực hiện chuyển đổi CPS nhẹ theo dòng chảy, sử dụng các phần mở rộng của các kỹ thuật được tiên phong với Screamer, để hỗ trợ các phần tiếp theo hạng nhất cực kỳ hiệu quả. Cuối cùng, nó hỗ trợ lựa chọn đại diện theo dòng chảy và lựa chọn đại diện ở mức độ thấp để chọn triển khai (hoặc không thực hiện) các thẻ, kiểm tra thẻ và gửi thẻ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Điều này giúp loại bỏ hầu hết các thẻ thời gian chạy, kiểm tra thẻ, gắn thẻ, tước thẻ, gửi thẻ, đấm bốc và bỏ hộp khỏi các chương trình. sử dụng các phần mở rộng của các kỹ thuật đi tiên phong với Screamer, để hỗ trợ các phần tiếp theo hạng nhất cực kỳ hiệu quả. Cuối cùng, nó hỗ trợ lựa chọn đại diện theo dòng chảy và lựa chọn đại diện ở mức độ thấp để chọn triển khai (hoặc không thực hiện) các thẻ, kiểm tra thẻ và gửi thẻ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Điều này giúp loại bỏ hầu hết các thẻ thời gian chạy, kiểm tra thẻ, gắn thẻ, tước thẻ, gửi thẻ, đấm bốc và bỏ hộp khỏi các chương trình. sử dụng các phần mở rộng của các kỹ thuật đi tiên phong với Screamer, để hỗ trợ các phần tiếp theo hạng nhất cực kỳ hiệu quả. Cuối cùng, nó hỗ trợ lựa chọn đại diện theo dòng chảy và lựa chọn đại diện ở mức độ thấp để chọn triển khai (hoặc không thực hiện) các thẻ, kiểm tra thẻ và gửi thẻ trên cơ sở mỗi giá trị trừu tượng và mỗi điểm chương trình. Điều này giúp loại bỏ hầu hết các thẻ thời gian chạy, kiểm tra thẻ, gắn thẻ, tước thẻ, gửi thẻ, đấm bốc và bỏ hộp khỏi các chương trình.Những phân tích và tối ưu hóa này cho phép Stalin tạo ra mã cực kỳ hiệu quả, vượt trội hơn tất cả các trình biên dịch Scheme khác bởi các yếu tố nằm trong khoảng từ hai đến một trăm, đặc biệt đối với mã chuyên sâu về số. Stalin thường tạo mã vượt trội hơn mã viết tay c và mã Fortran.

Tôi đã có thể tìm thấy một bài báo rất thú vị sau đây về việc thực hiện các cuộc gọi đóng / chức năng: Chuyển đổi đóng cửa nhẹ theo hướng dòng chảy . Tôi cũng đã gửi email cho tác giả để hỏi về các giấy tờ về các chủ đề khác, được đề cập đến như được viết trong giấy chuyển đổi đóng cửa:

Siskind, JM 2000a. Chuyển đổi CPS nhẹ theo dòng chảy. Đang chuẩn bị.

Siskind, JM 2000b. Đa hướng dòng chảy. Đang chuẩn bị.

Siskind, JM 2000c. Lựa chọn đại diện theo dòng chảy. Đang chuẩn bị.

Siskind, JM 2000d. Quản lý lưu trữ theo hướng dòng chảy. Đang chuẩn bị

Thật không may, anh ta không bao giờ có được xung quanh để viết những bài báo. Câu hỏi của tôi cho bạn là: có bất kỳ giấy tờ thay thế hoặc liên quan bao gồm các chủ đề này? Tôi rất muốn tìm hiểu làm thế nào Stalin (hoặc các trình biên dịch khác) có thể biên dịch một ngôn ngữ cấp cao như Scheme là rác được thu thập, gõ động, hỗ trợ các hàm hạng nhất và thậm chí các phần tiếp theo của lớp đầu tiên, có thể được biên dịch tĩnh thành mã hiệu quả như vậy . Mặc dù các bài viết về phân tích dòng chảy khá phong phú, các bài viết về việc sử dụng kết quả của một phân tích như vậy để thực hiện các tối ưu hóa được đề cập ở trên không.

Câu trả lời:


11

Điều quan trọng có lẽ là thực tế là nó sử dụng toàn bộ phân tích chương trình và tối ưu hóa toàn bộ chương trình. Bạn càng biết nhiều về cách một chương trình ứng xử, bạn càng có thể chuyên môn hóa và nội tuyến và thực hiện.

Trình biên dịch MLton cho ML chuẩn cũng thực hiện một điều tương tự ( http://mlton.org/ ). Có một bài trình bày (ít nhất) về nó: http://mlton.org/pages/References/attachments/060916-mlton.pdf .

Công việc trước đó được thực hiện bởi Craig Chambers và nhóm của ông tại Đại học Washington (ví dụ: http://www.cs.washington.edu/research/projects/cecil/www/pub/jdean-thesis.html ). Điều này đã được thực hiện trong bối cảnh của Bản thân và sau này là Cecil / Vortex.

Có lẽ có nhiều công việc hơn trong cộng đồng Scheme / Lisp. Bạn có thể muốn xem xét việc "tối ưu hóa toàn bộ chương trình".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.