Có gì mới trong kỹ thuật tối ưu hóa trình biên dịch trong vài năm qua?


14

Tôi quan tâm đến việc tối ưu hóa luồng dữ liệu và biểu đồ luồng điều khiển và đặc biệt phức tạp hơn về mặt tính toán. Nhưng cũng sẽ rất thú vị khi biết về những phát minh mới nhất trong lĩnh vực tối ưu hóa lổ nhìn trộm.


2
Trong luận án của tôi ( slide ) tôi đã thảo luận và thực hiện làm phẳng đồ thị cuộc gọi trong LLVM; về cơ bản, nó là một phép biến đổi liên văn bản loại bỏ khái niệm "hàm" bởi vì nó hợp nhất tất cả các mã lại với nhau, cho phép một loạt các khả năng thú vị như chuyển động mã liên văn bản, các quy ước gọi được tối ưu hóa cho cuộc gọi, thực thi stackless, v.v.
CAFxX

@CAFxX: slide bị sập Open Office .. bạn có tình cờ có ảnh trực tuyến không?
Yttrill


Cảm ơn, có thể xem với điều đó, mặc dù các biểu đồ đã ổn để có thể nhìn thấy văn bản là tốt.
Yttrill

Câu trả lời:


8

Tôi không chắc nó mới lạ như thế nào, hoặc nếu nó quá quan tâm đến lợi ích của bạn, nhưng Hoopl cho thấy cách tối ưu hóa luồng điều khiển / dữ liệu có thể được mô đun hóa, với việc truyền bá sự thật về các đỉnh đồ thị điều khiển độc lập với ngôn ngữ và tối ưu hóa cụ thể.

Họ tham khảo một thuật toán năm 2002 của Lerner, Grove và Chambers kết hợp các tối ưu hóa đơn giản thành một "siêu tối ưu hóa".



6

Đã có một chút hồi sinh trong trình biên dịch tối ưu hóa được xác minh. Ngoài bài viết của Lerner (được đề cập trong một bình luận trước đó), bạn có thể xem dự án CompCert do Xavier Leroy dẫn đầu. Họ đã thực hiện một số nội dung thú vị với việc chỉ định tối ưu hóa là bằng chứng có thể kiểm tra bằng máy (sử dụng Coq ). Tôi chưa đọc các bài báo, nhưng dự án Công cụ phần mềm được xác minh tại Princeton dường như cũng tạo ra kết quả thú vị trong lĩnh vực này.


1
Chúng tôi cũng đang làm việc trên một dự án tương tự như CompCert: CerCo ( cerco.cs.unibo.it ). Không giống như CompCert, chúng tôi hướng đến việc tạo ra một trình biên dịch bảo toàn chi phí cụ thể đã được xác minh cho một tập hợp con lớn của C (CompCert chỉ cho thấy các thuộc tính mở rộng của chương trình nguồn được bảo toàn bằng cách biên dịch). Chúng tôi cũng đang triển khai trong trình biên dịch một vài tối ưu hóa vòng lặp phức tạp vừa phải, cũng như tối ưu hóa "nhẹ" như CompCert sử dụng, tất nhiên sẽ cần xác minh là bảo toàn chi phí.
Đaminh Mulligan

5

Nhận ra rằng baz [i] + = force (foo [i], foo [j]) trong một vòng lặp FOR kép có kết quả độc lập cho (i, j) và sắp xếp lại các cuộc gọi vào một đường cong điền vào không gian trên (i, j) để cắt giảm bộ nhớ cache.

Không hoàn toàn "lén lút" nhưng nhận được hành vi lãng quên bộ nhớ cache cho "miễn phí" là tốt.

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.